如何查找子节点并存储在不同的对象中

时间:2013-09-17 04:12:24

标签: c# xml xml-parsing

<?xml version="1.0" encoding="utf-8" ?>
<class name="EmployeeData.Employee">
  <property emp="1">
    <empid>12345678</empid>
    <empname>ABC1</empname>
    <project>XYZ1</project>
  </property>
  <property emp="2">
    <empid>87654321</empid>
    <empname>ABC2</empname>
    <project>XYZ2</project>
  </property>
</class>

在上面的XML文档中,我有两个名称为property的节点。我需要解析它并将值存储在一个对象中"12345678","ABC1","XYZ1"和另一个对象中的"87654321","ABC2","XYZ2"。此外,我应该能够随时随地使用这两个对象。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

使用LINQ2XML

var doc=XDocument.Load(url);
var output= doc.Elements("property").Select(x=>
              new
              {
                    empid=x.Element("empid").Value,
                    empname=x.Element("empname").Value,
                    project=x.Element("project").Value
              }
);

现在你可以迭代输出

foreach(var property in output)
{
    property.empid;
    property.empname;
    property.project;
}

答案 1 :(得分:0)

首先获取每个&lt; property&gt;

XmlDocument xdoctest = new XmlDocument();    
xdoctest.LoadXml("...");   
XmlNodeList nodes = xdoctest.SelectNodes("class/property");

然后循环遍历每个属性节点,遍历该节点的每个元素并获取值。在这个例子中,我附加到StringBuilder,但编辑它以满足您的需要。

foreach (XmlNode node in nodes)
{
    StringBuilder nodeString = new StringBuilder();
    foreach(XmlElement elm in node)
    {
        nodeString.Append(elm.InnerText + ",");
    }
    // Remove last ,
    nodeString = new StringBuilder(nodeString.ToString().Substring(0, nodeString.Length - 1));
    Console.WriteLine(nodeString);
}

根据您提供的XML输出:

12345678,ABC1,XYZ1
87654321,ABC2,XYZ2