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

本文关键字:对象 存储 何查找 查找 子节点 | 更新日期: 2023-09-27 18:31:29

<?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"在另一个对象中。此外,我以后应该能够随时随地使用这两个对象。我该怎么做?

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

使用 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;
}

首先获取每个<属性>

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