Xdocument-迭代XML元素



给定一个示例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>

一个人将如何通过每个图书馆迭代并只接到孩子?例如。如果我是第一个图书馆元素,而我去检索了所有的后代/孩子,它只会带着其中的两本书返回。

我已经尝试了迭代和使用xlement.element.element(" book"),xlement.elements(),xlement.descendants()等,但所有返回书籍的每个元素(因此它将从第二个库也是)。通常,我认为我只是在努力了解Xdocument如何跟踪其元素以及被认为是后代/孩子的内容。

如果可能的话,如果可以解释如何使用任何级别的元素进行Xdocument,那么将要欣赏(例如,如果每本书都有子元素,以及这些元素是否具有子元素等)。

您可以通过以下方式浏览所有库的后代,在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

sheer,

问题是您正在用"书"拉动所有元素。

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

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

现在,这将为您提供名称为"一些库"的元素。

最新更新