当循环通过XPathNodeIterator不起作用时
本文关键字:不起作用 XPathNodeIterator 循环 | 更新日期: 2023-09-27 18:34:48
我有一个名为_xpCategories的XPathNodeIterator
,它保存着这样的数据
<root>
<category numberofproducts="0">
<id>hoved</id>
<url>/products/hovednavigation</url>
<name>HOVEDNAVIGATION</name>
<category numberofproducts="0">
<id>embalfors</id>
<url>/products/emballage-og-forsendelse</url>
<name>Emballage og forsendelse</name>
<category numberofproducts="0">
<id>gaveindpak</id>
<url>/products/gaveindpakning</url>
<name>Gaveindpakning</name>
<category numberofproducts="3">
<id>cellofan</id>
<url>/products/cellofan</url>
<name>Cellofan</name>
</category>
<category numberofproducts="30">
<id>gavebånd</id>
<url>/products/gavebaand</url>
<name>Gavebånd</name>
</category>
</category>
<category numberofproducts="0">
<id>kuvkonv</id>
<url>/products/kuverter-og-konvolutter</url>
<name>Kuverter og konvolutter</name>
</category>
</category>
</category>
</root>
我想遍历此 xml 中的每个类别并打印每个类别的 ID。我做过一些这样的代码。
while (_xpCategories.MoveNext())
{
Console.WriteLine(_xpCategories.Current.SelectSingleNode("id"));
}
但是这个循环只工作一个,只有第一个类别id正在获取,然后它存在循环。谁能指出我做错了什么?
您需要修改XPath
表达式以选择文档中的所有类别,无论它们在文档中的哪个位置,因为您有 1 个父类别,其中包含子类别,然后是这些子类别中的子类别。
/root/category
- 这将仅选择具有许多子节点的父类别节点(1 个节点(。
//category
- 这应该选择 XML 文档中的所有类别,无论它们出现在何处。
查看此处和此处以获取更多帮助
你可以像这样将 XPathNavigator 与 XPathNodeIterator 一起使用
(此处修改后的示例(
XPathDocument document = new XPathDocument("yourxml.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathNodeIterator _xpCategories = navigator.Select("//category");
_xpCategories.MoveNext();
while (nodesText.MoveNext())
Console.WriteLine(nodesText.Current.Value);