如何使用相同名称但不同深度的树的XML元素?

时间:2018-02-24 02:39:57

标签: c# xml

我想获取“年龄” 元素“name”子元素的值。不是任何其他元素“name”的值(在本例中为“person”的元素“name”child。)

作为输出,我想得到“威廉”和“莎拉”。

这个XML是一个简单的例子,但想象树更深,一些元素的名称在树的某个深度重复。

如果有助于清除混淆,欢迎任何建议和示例使用不同的XML文件。

<?xml version='1.0'?>
<root>
  <person>
    <name>Jake</name>
    <age>18</age>
  </person>
  <person>
    <name>Steve</name>
    <age>
      <name>William</name>
    </age>
  </person>
  <person>
    <name>Nicole</name>
    <age>
      <name>Sarah</name>
    </age>
  </person>
</root>

CODE:

public void getE()
{

    XmlDocument doc = new XmlDocument();
    doc.Load("file.xml");

    XmlNodeList elemList = doc.GetElementsByTagName("name");

    for (int i = 0; i < elemList.Count; i++)
    {
        Console.WriteLine(elemList[i].InnerXml);
    }
}

1 个答案:

答案 0 :(得分:0)

使用Xml Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {

            XDocument doc = XDocument.Load(FILENAME);

            var results = doc.Descendants("person").Select(x => new {
                name = x.Element("name"),
                age = x.Element("age"),
                age_name = x.Element("age").Element("name") == null ? string.Empty : (string)x.Element("age").Element("name")
            }).ToList();

        }
    }
}