0

我使用的代码是:

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 - 这就是我一开始就期望的。

难道我做错了什么?是否有关于 System.Xml 等应该如何运作的假人的详细解释?

4

1 回答 1

0

正如Martin Honnen指出的那样:一个很好的来源是msdn/system.xml... “XPathNavigator 类返回的 XPathNodeIterator 对象未位于选定节点集中的第一个节点上。调用 XPathNodeIterator 的 MoveNext 方法必须使类将 XPathNodeIterator 对象定位在所选节点集中的第一个节点上。”

这现在很有意义 - 因为否则您将无法使用以下内容遍历列表:

while (iterator.MoveNext())
{
    //Do Stuff
}

感谢Martin Honnen在评论部分的回答——我完全错过了那节课的重点。

于 2010-12-10T14:34:14.893 回答