Пока цикл через 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);
Другие вопросы по тегам