XMLDocument.selectnodes Вопрос
-
09-10-2019 - |
Вопрос
В чем разница с использованием коренного узла для выбора и использования объекта документа для выбора узлов? Какой способ предпочтительнее.
Например,
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()");
Вернуть совершенно разные результаты.