Вопрос

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

Например,

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");
Это было полезно?

Решение

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

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

потому что если root документ существует

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

Другие советы

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

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

Корень документа 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()");

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top