在仅选择带有XPathNodeIterator的Childnodes后,我的InnerXML等于我的OuterXML

时间:2010-12-10 13:51:58

标签: c# xml xmldocument xpath xpathnavigator

我使用的代码是:

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等应该如何运作?

1 个答案:

答案 0 :(得分:0)

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

这使得perfekt Sense现在 - 因为否则你将无法使用类似的东西迭代List:

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

感谢Martin Honnen在评论部分提供的答案 - 我完全错过了该课程的重点。