C# 在c中使用XmlReader?

C# 在c中使用XmlReader?,c#,xml-parsing,C#,Xml Parsing,我需要解析一个XML文件 该文件的结构如下: <root> <group id = "one"> <info1> <detail1> detail </detail1> <detail2> detail </detail2> </info1>

我需要解析一个XML文件

该文件的结构如下:

<root> 
      <group id = "one">
             <info1>
                   <detail1> detail </detail1>
                   <detail2> detail </detail2>
             </info1>
             <info2>
                   <detail1> detail </detail1>
                   <detail2> detail </detail2>
             </info2>
      </group> 
      <group id = "two">
             <info1>
                   <detail1> detail </detail1>
                   <detail2> detail </detail2>
             </info1>
             <info2>
                   <detail1> detail </detail1>
                   <detail2> detail </detail2>
             </info2>
      </group> 

</root>

我希望将group元素中的所有内容都存储为字符串。一个字符串表示组中的所有内容,而不考虑属性id。如何使用XMLReader实现这一点

使用XML阅读器,您可以应用

List <string> stringList = new List <string>();

while (xmlReader.Read()) {
 if ((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "group")) {

  string str = string.Empty;
  foreach(var element in xmlReader) {
   str += element.value;

  }
  stringList.add(str);

 }
}
或 您可以创建一个类并使用属性进行映射

class Group {

 public string info1 {
  get;
  set;
 }

 public string info2 {
  get;
  set;
 }

 public string details1 {
  get;
  set;
 }

 public string details2 {
  get;
  set;
 }
}


List<Group> groupList = new List <Group>();

while (xmlReader.Read()) {
    if ((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "group")) {

     Group group = new Group();

     foreach(XmlNode node in xmlReader) {
      switch (node.Name) {
       case "info1":
        group.info1 = node.Value;
        break;
       case "info2":
        group.info2 = node.Value;
        break;
       case "details1":
        group.details1 = node.Value;
        break;
       case "details2":
        group.details2 = node.Value;
        break;        
      }
      groupList.add(group);
     }
}

您可以选择使用序列化或XMLReader中的数据集加载类: 类别:

举例如下:

string xml = "<root><group id=\"one\"><info1><detail1>detail</detail1><detail2>detail</detail2></info1><info2><detail1>detail</detail1><detail2>detail</detail2></info2></group><group id=\"two\"><info1><detail1>detail</detail1><detail2>detail</detail2></info1><info2><detail1>detail</detail1><detail2>detail</detail2></info2></group></root>";
    XDocument x = XDocument.Parse(xml, LoadOptions.PreserveWhitespace);

    //option1
    XmlReader reader = x.CreateReader();
    DataSet ds = new DataSet();
    //DataSet will contain multiple tables
    ds.ReadXml(reader);

    //option 2
    XmlSerializer ser = new XmlSerializer(typeof(root));
    XmlReader reader2 = x.CreateReader();
    var res = ser.Deserialize(reader2);
因此,在选项1中,您应该有多个表的数据集,在选项2中:加载的cobject根:

或可以加载到数据集中:XmlReader=x.CreateReader;数据集ds=新数据集;ds.ReadXmlreader;
string xml = "<root><group id=\"one\"><info1><detail1>detail</detail1><detail2>detail</detail2></info1><info2><detail1>detail</detail1><detail2>detail</detail2></info2></group><group id=\"two\"><info1><detail1>detail</detail1><detail2>detail</detail2></info1><info2><detail1>detail</detail1><detail2>detail</detail2></info2></group></root>";
    XDocument x = XDocument.Parse(xml, LoadOptions.PreserveWhitespace);

    //option1
    XmlReader reader = x.CreateReader();
    DataSet ds = new DataSet();
    //DataSet will contain multiple tables
    ds.ReadXml(reader);

    //option 2
    XmlSerializer ser = new XmlSerializer(typeof(root));
    XmlReader reader2 = x.CreateReader();
    var res = ser.Deserialize(reader2);