Пока цикл через XPathNodeIterator не работает
У меня есть XPathNodeIterator
с именем _xpCategories, который содержит такие данные
<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 и распечатать идентификатор каждой из них. Я сделал такой код, как этот.
while (_xpCategories.MoveNext())
{
Console.WriteLine(_xpCategories.Current.SelectSingleNode("id"));
}
Но этот цикл работает только один, только первый идентификатор категории получает, затем существует цикл. Можете ли вы указать, что я делаю неправильно?
2 ответа
Вам нужно изменить свой 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);