XmlDocument.SelectNodes question - PullRequest
       23

XmlDocument.SelectNodes question

2 голосов
/ 13 ноября 2010

В чем разница с использованием корневого узла для выбора и с помощью объекта документа для выбора узлов? Какой способ предпочтительнее.

Например,

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");

Ответы [ 3 ]

1 голос
/ 13 ноября 2010

Поскольку выражение XPath * // всегда совпадает с корнем документа, результат будет одинаковым, независимо от того, начинаете ли вы с корня документа или с documentElement.

Поэтому я думаю, что вам лучше использовать более короткий синтаксис Doc.SelectNodes("//@id");.

1 голос
/ 14 ноября 2010

Корень XML-документа содержит, по крайней мере, его элемент документа, но он также может содержать инструкции по обработке и комментарии.Например, в этом 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 -->

корень имеет три дочерних узла, один из которых является его элементом верхнего уровня.В этом случае это:

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

и это:

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

возвращают совершенно разные результаты.

1 голос
/ 13 ноября 2010

На самом деле, я никогда не получал никаких различий. И используйте только

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

потому что, если корень документа существует

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