Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ读取XML_C#_Linq - Fatal编程技术网

C# 使用LINQ读取XML

C# 使用LINQ读取XML,c#,linq,C#,Linq,嗨,我正在寻找LINQ查询提取 级别1类型、子类型 四级路径 来自下面的xml示例。我真的在寻找一个LINQ查询,这样我就可以逐步查看结果数据 <?xml version="1.0" encoding="utf-8"?> <Toplevels> <TopLevel> <Level1> <Type>Read this</Type> <Subtype>Read this</S

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

级别1类型、子类型

四级路径

来自下面的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>

读这个
读这个
读这个
读这个
读这个
读这个
有人能帮忙吗


提前感谢

您可以使用此代码获取
类型
,并尝试在尝试其他操作的同时提高编程技能

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

可以使用
子体
搜索子体节点

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

我不明白你想做什么。。。但我会尽力帮助您,因为我认为我理解您可以尝试以下方法:var arrayOfNodes=从doc.substands(“Level1”)中的节点选择node.substands(“otherLevels”)<代码>后代,
后代
无处不在…您好,感谢您的回复。。。我希望有类型,子类型和4级路径作为每个顶级记录。这更有意义吗?我如何在同一个foreach循环中访问级别4?@user2744609编写代码确实不是我的职责,但这次我会这么做。请下次自己试一试。如果您有bug,我会帮您修复,但在您有实际操作经验之前,您将永远无法掌握窍门…5分钟。这非常感谢。@user2744609任何timeSlight更改:foreach(doc.element中的XElement元素(“Toplevels”).Elements(“TopLevel”)更改为foreach(doc.subjections中的XElement元素(“Toplevels”).Elements”(“Toplevels”))... 谢谢你的指导,真的很有帮助。我一直在尝试完全不同的东西