0

您好我正在寻找要提取的 LINQ 查询

Level1 类型,子类型

4级路径

来自下面的 xml 示例。我真的在寻找一个 LINQ 查询,这样我就可以逐步浏览结果数据。

<?xml version="1.0" encoding="utf-8"?>
<Toplevels>
  <TopLevel>
    <Level1>
      <Type>Read this</Type>
      <Subtype>Read this</Subtype>
    </Level1>
    <Level2>
      <Level3>
        <Level4>
          <L4Node path="read this" />
        </Level4>

      </Level3>
    </Level2>
  </TopLevel>
  <TopLevel>
    <Level1>
      <Type>Read this</Type>
      <Subtype>Read this</Subtype>
    </Level1>
    <Level2>
      <Level3>
        <Level4>
          <L4Node path="read this" />
        </Level4>

      </Level3>
    </Level2>
  </TopLevel>
  <TopLevel>
    <Level1>
      <Type>Read this</Type>
      <Subtype>Read this</Subtype>
    </Level1>
    <Level2>
      <Level3>
        <Level4>
          <L4Node path="read this" />
        </Level4>

      </Level3>
    </Level2>
  </TopLevel>

</Toplevels>

有人可以帮忙吗?

提前致谢

4

2 回答 2

0

您可以使用此代码来获取type并尝试提高您的编程技能,同时尝试做其他的

     XDocument doc =XDocument.Load("D:\\tmp.xml");

     foreach (XElement element in doc.Element("Toplevels").Elements("TopLevel"))
     {
        string str = element.Element("Level1").Element("type").Value;

        string lvl4 = element.Element("Level1").Element("Level2").Element("Level3").Element("Level4").Element("L4Node").Attribute("path").Value;
     }
于 2013-09-08T12:33:15.297 回答
0

您可以使用 搜索后代节点Descendants

        // using LINQ

        var xdoc = XDocument.Parse(XML);


        var subtypes = xdoc.Descendants("Level1").Descendants("Subtype");
        Console.WriteLine("LINQ Level1 Subtype");
        foreach (var el in subtypes)
        {
            Console.WriteLine(el.Value);
        }

        var paths = xdoc.Descendants("Level4").Descendants("L4Node").Attributes("path");
        Console.WriteLine("LINQ Level4 Path");
        foreach (var el in paths)
        {
            Console.WriteLine(el.Value);
        }

LINQ 的替代方法是使用 XPath

        // using XPath

        var doc = new XmlDocument();
        doc.LoadXml(XML);

        var subtype2 = doc.SelectNodes("/Toplevels/TopLevel/Level1/Subtype");
        Console.WriteLine("XPath Level1 Subtype");
        foreach (XmlNode el in subtype2)
        {
            Console.WriteLine(el.InnerText);    
        }

        // using XPath shorter, less efficient
        var subtype3 = doc.SelectNodes("//Level1/Subtype");
        Console.WriteLine("XPath Level1 Subtype");
        foreach (XmlNode el in subtype3)
        {
            Console.WriteLine(el.InnerText);
        }
于 2013-09-08T12:47:08.957 回答