给出一个示例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对任何级别的元素进行此操作,我们将不胜感激(例如,如果每本书都有子元素,并且这些元素是否具有子元素等)。
答案 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