Question

Quelle est la différence en utilisant le noeud racine pour sélectionner et utiliser l'objet de documents pour sélectionner les nœuds? De quel côté est préféré.

Par exemple,

1.

XmlDocument Doc = new XmlDocument();
Doc.Load(mem);

XmlNodeList nodeList = Doc.SelectNodes(@"//@id");

2.

XmlDocument Doc = new XmlDocument();
Doc.Load(mem);

XmlElement root = Doc.DocumentElement;

XmlNodeList nodeList = root.SelectNodes(@"//@id");
Était-ce utile?

La solution

En fait, je n'a jamais eu aucune différence. Et utilisez simplement

Doc.SelectNodes(@"//@id");

parce que si la racine du document existe

bool b = Doc.OuterXml == Doc.DocumentElement.OuterXml; // true

Autres conseils

Depuis XPath 'expression de la // correspond toujours à partir de la racine du document, le résultat être le même si vous commencez à partir de la racine du document ou de son documentElement.

Je suppose que vous êtes mieux en utilisant la syntaxe Doc.SelectNodes("//@id"); plus courte.

La racine d'un document XML contient son élément de document au moins, mais il peut également contenir des instructions et des commentaires de traitement. Par exemple, dans ce document XML:

<!-- This is a child of the root -->
<document_element>
   <!-- This is a child of the document element -->
<document_element>
<!-- This is also a child of the root -->

la racine a trois noeuds enfants, dont l'un est son élément de niveau supérieur. Dans ce cas, ceci:

XmlNodeList comments = doc.SelectNodes("comment()");

et ceci:

XmlNodeList comments = doc.DocumentElement.SelectNodes("comment()");

retour des résultats totalement différents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top