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