【问题标题】:XDocument - Iterating Over XML ElementsXDocument - 遍历 XML 元素
【发布时间】:2017-02-20 05:25:10
【问题描述】:

给定一个示例 XML 文件:

<libraries>

  <library name="some library">
    <book name="my book"/>
    <book name="your book"/>
  </library>

  <library name="another library">
    <book name="his book"/>
    <book name="her book"/>
  </library>

</libraries>

如何遍历每个库并仅获取其子库?例如。如果我在第一个 library 元素中并且我去检索它的所有后代/孩子,它只会返回其中的两本书。

我尝试过迭代和使用 XElement.Elements("book")、XElement.Elements()、XElement.Descendants() 等,但都返回了作为书的每个元素(因此它会从第二个图书馆也是)。大多数情况下,我认为我只是在努力理解 XDocument 如何跟踪其元素以及什么被认为是后代/孩子。

如果可能,如果有人可以解释如何使用 XDocument 为任何级别的元素完成此操作,将不胜感激(例如,如果每本书都有子元素,以及这些元素是否有子元素等)。

【问题讨论】:

    标签: c# xml linq-to-xml


    【解决方案1】:

    您可以通过以下方式遍历库的所有后代来迭代您的 XML。

      XDocument doc=XDocument.Load(XmlPath);
      foreach (var item in doc.Descendants("library"))
      IEnumerable<XNode> nodes = item.DescendantNodes();//Here you got book nodes within a library
    

    【讨论】:

    • 原来这是我在尝试的,除了昨晚在我昏昏欲睡的状态下,我打错字了,正在做 IEnumerable nodes = doc.DescendantNodes() vs item.DescendantNodes() ;这就是我要找的。谢谢!
    【解决方案2】:

    纯粹的,

    问题是你用“书”拉所有元素。

    如果您只想获取依赖于父元素的项目,则必须提供适当的条件。

     var v = from n in doc.Descendants("library")
                    where n.Attribute("name").Value == "some library"
                    select n.DescendantNodes();
    

    现在,这将为您提供名称为“某个库”的元素。

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 2012-11-23
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多