使用 LINQ 读取 XML

本文关键字:XML 读取 LINQ 使用 | 更新日期: 2023-09-27 18:30:45

嗨,我正在寻找要提取的 LINQ 查询

1 级类型,子类型

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>

谁能帮忙?

提前致谢

使用 LINQ 读取 XML

您可以使用此代码来获取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;
     }
您可以使用

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);
        }