只選擇的childNodes後等於我OuterXML我使用的代碼是:我InnerXML與創建XPathNodeIterator
string m_myXML = "<parent>\n" +
" <child1>\n"+
" <child2a>\n"+
" <list1 attrib=\"one\" />\n"+
" <list2 attrib=\"two\" />\n"+
" </child2a>\n"+
" <child2b>\n"+
" <list1 attrib=\"one\" />\n"+
" <list2 attrib=\"two\" />\n"+
" </child2b>\n"+
" </child1>\n"+
"</parent>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(m_myXML);
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr;
expr = nav.Compile("/*/*"); //Select all children of top level parents
XPathNodeIterator iterator = nav.Select(expr);
結果是iterator.Current.InnerXml相同iterator.Current.OuterXml,這是與原始的m_myXML相同。當我通過iterator.MoveNext()將迭代器移動到下一個時,它指向第一個child1 - 這正是我從開始就期望的。
我做錯了什麼?有沒有一個很好的和詳細的解釋dummys在那裏如何System.Xml等應該功能?
那麼文檔http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx清楚地說:「由XPathNavigator類返回的XPathNodeIterator對象不位於第一個節點上在選定的一組節點中,必須調用XPathNodeIterator類的MoveNext方法來將XPathNodeIterator對象定位到所選節點集合中的第一個節點上。「所以我不確定爲什麼你希望迭代器處於有意義的狀態,而不用調用MoveNext或者使用for-each。 – 2010-12-10 14:08:28
@MartinHonnen - 你應該把它作爲答案,而不是評論! – 2010-12-10 14:17:43