我使用的代码是:
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等应该如何运作?
答案 0 :(得分:0)
正如Martin Honnen所指出: 一个好的源是msdn/system.xml...“XPathNavigator类返回的XPathNodeIterator对象不位于选定节点集中的第一个节点上。必须调用XPathNodeIterator类的MoveNext方法来定位XPathNodeIterator对象在所选节点集中的第一个节点上。“
这使得perfekt Sense现在 - 因为否则你将无法使用类似的东西迭代List:
while (iterator.MoveNext())
{
//Do Stuff
}
感谢Martin Honnen在评论部分提供的答案 - 我完全错过了该课程的重点。