Что ж, в модели 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 или SelectNodes в System.Xml.XmlDocument/XmlElement/XmlNode.
24.08.2011