2013-10-10 36 views
0

我有一個XPathNodeIterator名爲_xpCategories持有這樣While循環通過創建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不饒人,那麼它存在的loop.Can任何一個點了什麼,我做錯了什麼?

+0

我看來像你的XML是錯誤的。你有類別內的類別等,你有的循環只是遍歷1節點,這就是爲什麼它只循環一次。 –

+0

@SecretSquirrel有什麼方法可以遍歷整個文檔? – Athul

+0

如果你想這樣做,你不會使用'XPath'。但是,您應該能夠調整您正在執行的'XPath'查詢以選擇所有'Categories' 您應該使用用於選擇所有類別的'XPath'嗎? –

回答

1

您需要修改XPath表達式選擇文檔中的所有類別,無論他們在哪裏在文檔中,因爲您有1個具有子類別的父類別,然後是這些子類別中的子類別。

/root/category - 這將只選擇具有許多子節點的父類別節點(1個節點)。

//category - 這應該選擇XML文檔中的所有類別,無論它們出現在何處。

採取更多的幫助,一起來看看herehere

1

可以使用的XPathNavigator與創建XPathNodeIterator這樣

(修改例from here

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); 
+0

我從第三方DLL獲取XML,我沒有任何控制權,他們只是提供給我一個XPathNodeIterator來處理,所以它不可能像XPathDocument document = new XPathDocument(「yourxml.xml」 ); – Athul

+0

你如何用你的Json填充_xpCategories?你能發佈更多的代碼嗎? –