XDocument - 迭代XML元素

时间:2017-02-20 05:25:10

标签: c# xml linq-to-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>

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

我已经尝试过迭代并使用XElement.Elements(“book”),XElement.Elements(),XElement.Descendants()等,但都返回书中的每个元素(所以它会从中拉出元素第二个图书馆也是如此)。大多数情况下,我认为我只是在努力理解XDocument如何跟踪其元素以及被认为是后代/孩子的内容。

如果可能的话,如果可以解释如何使用XDocument对任何级别的元素进行此操作,我们将不胜感激(例如,如果每本书都有子元素,并且这些元素是否具有子元素等)。

2 个答案:

答案 0 :(得分:0)

纯粹,

问题是你要用#34; book&#34;来拉动所有元素。

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

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

现在,这将为您提供名称是&#34;某些库&#34;的元素。

答案 1 :(得分:0)

您可以通过以下方式遍历库的所有后代来迭代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