Хорошо в модели DOM, в которой System.Xml.XmlDocument / XmlElement / XmlNode реализует коллекцию ChildNodes, вы получаете все узлы, которые считаются дочерними узлами контейнерного узла, которые могут быть узлами элементов, текстовыми узлами, узлами комментариев, узлами инструкций обработки (и для XmlDocument узел DOCTYPE и объявление XML).Узлы атрибутов не считаются дочерними узлами в этой модели, поэтому вы не найдете их в коллекции ChildNodes.Вы можете получить доступ к коллекции атрибутов , если вам это интересно.
[править] Вы можете использовать оператор объединения XPath |
, чтобы выбирать и обрабатывать объединение узлов так, чтобы XML был
<!-- comment 1 -->
<root att1="value 2" att2="value 2">Text<!-- comment 2 --><child att3="value 3">
<descendant/>
</child>
</root>
следующий фрагмент VB
Dim doc As New XmlDocument()
doc.Load("file.xml")
For Each node As XmlNode In doc.SelectNodes("//node() | //@*")
Console.WriteLine("Found node of type {0} with name {1}", node.NodeType, node.Name)
Next
выводит
Found node of type Comment with name #comment
Found node of type Element with name root
Found node of type Attribute with name att1
Found node of type Attribute with name att2
Found node of type Text with name #text
Found node of type Comment with name #comment
Found node of type Element with name child
Found node of type Attribute with name att3
Found node of type Element with name descendant
Таким образом, вы получаете одно выражение пути, выбирающее как атрибуты, так и узлы элементов,текстовые узлы и узлы комментариев.
Вы также должны знать, что DOM и XSLT / XPath имеют некоторое несоответствие в своих моделях дерева, например, DOM различает обычные текстовые узлы и узлы секций CDATA, XPath не делает этого.И DOM допускает смежные текстовые узлы, XPath не делает этого.Поэтому, несмотря на то, что вы часто можете писать запросы XPath к деревьям DOM, а Microsoft поддерживает это как с реализацией DOM MSXML, так и с реализацией DOM .NET, вам необходимо помнить о тонких различиях между моделями деревьев, с которыми определяется XPath, и использовать XPath при выполнении SelectSingleNode илиВыберите узлы в System.Xml.XmlDocument / XmlElement / XmlNode.