Le code j'utilise est:Mon InnerXml est égal à mon OuterXml après avoir sélectionné seulement les ChildNodes avec 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);
Le résultat est que iterator.Current.InnerXml est le même que iterator.Current.OuterXml et c'est Identique à l'original m_myXML. Quand je déplace l'itérateur vers le suivant via iterator.MoveNext(), il pointe vers le premier enfant1 - ce que j'attendrais exactement au début.
Est-ce que je fais quelque chose de mal? Existe-t-il une bonne et détaillée explication pour dummys là-bas comment System.Xml est censé fonctionner?
Bien la documentation http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx indique clairement: "Un objet XPathNodeIterator retourné par la classe XPathNavigator n'est pas positionné sur le premier noeud dans un ensemble sélectionné de noeuds Un appel à la méthode MoveNext de la classe XPathNodeIterator doit être effectué pour positionner l'objet XPathNodeIterator sur le premier noeud de l'ensemble de noeuds sélectionné. ". Donc, je ne suis pas sûr pourquoi vous attendez que l'itérateur soit dans un état significatif sans appeler MoveNext ou en utilisant for-each. –
@MartinHonnen - vous devriez mettre cela comme la réponse, pas comme un commentaire! –