Microsoft KB Archive/317663

= HOW TO: Access XML Data Using DOM in .NET Framework with Visual Basic .NET =

Article ID: 317663

Article Last Modified on 9/24/2003

-

APPLIES TO


 * Microsoft Visual Basic .NET 2003 Standard Edition
 * Microsoft Visual Basic .NET 2002 Standard Edition
 * Microsoft .NET Framework 1.0
 * Microsoft .NET Framework 1.1

-



This article was previously published under Q317663



For a Microsoft Visual C# .NET version of this article, see 317664.

This article refers to the following Microsoft .NET Framework Class Library namespaces:
 * System.Xml
 * System.Text

IN THIS TASK
SUMMARY
 * Requirements
 * System.Xml Methods and Properties
 * Access Data from XML Documents

REFERENCES



SUMMARY
This step-by-step article explains how to access required data in extensible markup language (XML) documents programmatically by using the System.Xml.XmlDocument class and the related classes.

The System.Xml.XmlDocument class implements the core XML Document Object Model (DOM) parser of the .NET Framework. The System.Xml.XmlDocument class is compliant with the World Wide Web Consortium (W3C) DOM Level 1 and Level 2 Core standards.

XML content can be classified broadly into a collection of nodes and attributes of those nodes. You can use the DOM model implementation of System.Xml to query or to access these nodes and attributes of XML documents. The DOM implmentation of System.Xml provides several ways to access these nodes and the attributes.

back to the top

Requirements
The following list outlines the recommended hardware, software, network infrastructure, and service packs that are required:
 * Microsoft Windows XP, Windows 2000, or Windows NT 4.0 Service Pack 6a
 * Microsoft Data Access Components (MDAC) 2.6 or later
 * Microsoft Visual Studio .NET

This article assumes that you are familiar with the following topics:
 * Visual Basic .NET syntax
 * XML and the related standards

back to the top

System.Xml Methods and Properties
This section describes several methods and properties of System.Xml classes. For more information, see the Microsoft .NET Framework Software Development Kit (SDK) documentation.

You can use the SelectNodes and the SelectSingleNode methods that the XmlDocument class implements to specify and to execute XPath queries against XML data that is loaded into the DOM. For additional information about how to use these methods and to see a relevant code sample, click the article number below to view the article in the Microsoft Knowledge Base:

317018 HOW TO: Use the System.Xml.XmlDocument Class to Execute XPath Queries in Visual Basic .NET

For additional information about how to execute XPath queries with the System.Xml classes, click the article number below to view the article in the Microsoft Knowledge Base:

313828 INFO: Roadmap for Executing XPath Queries in .NET Applications

To access data, you typically select or navigate to one or more required nodes and then use the resulting one or more nodes to manipulate the XML content. The following is a list of relevant System.Xml properties and methods:
 * InnerText and InnerXml. Find concatenated values of all child nodes or the markup of all child nodes respectively.
 * Value. Provides access to the value of a node.
 * Attributes. Finds the collection of attributes of the current node.
 * FirstChild, LastChild, and ChildNodes. Provide access to the first node, the last node, or all of the child nodes of the current node.
 * NextSibling and PreviousSibling. Provide access to the nodes immediately follow and immediately precede respectively.
 * DocumentElement. Provides access to the root XmlElement of the document.
 * Item. Finds the specified child element.
 * NodeType (of type XmlNodeType). Indicates the type of the current node; for example Attribute, Element, or Text.
 * XmlNodeType. Enumeration holds all possible node types.
 * GetElementsByTagName and GetElementByID. Provide access to one or more specified XML elements.

You can use several other properties and methods to access XML content, such as Name and NameTable. For the complete list, see the Microsoft .NET Framework SDK documentation.

back to the top

Access Data from XML Documents
The following example shows how to use some of these methods to access XML data. Read the inline comments to understand how the code works.   Use Notepad or a similar text editor to save the following data as a file named C:\Q317663.xml:    Principle of Relativity Albert Einstein Physics   Cosmos</Title> Carl Sagan</Author> Cosmology</Genre> </Book> </Collection> </li> <li>Create a new Visual Basic .NET Console Application project.</li> <li> Replace the code in Module1.vb with the following code. This example loads the XML document from a file representing a collection of Books and then accesses the content using some of the methods mentioned earlier. Imports System.Xml Imports System.Text

Module Module1

Sub Main

Try

' Create an Xml document instance and load XML data. Dim doc As XmlDocument = New XmlDocument doc.Load(&quot;C:\Q317663.xml&quot;)

' 1. Select all the Book titles by using an XPath query. Dim nodeList As XmlNodeList = doc.SelectNodes(&quot;//Book/Title&quot;) Dim node As XmlNode Console.WriteLine(&quot;{0}&quot;, &quot;TITLES LIST: &quot;) For Each node In nodeList Console.WriteLine(&quot;{0}&quot;, node.InnerText) Next

' 2. Read the XmlDeclartion values. Dim decl As XmlDeclaration = CType(doc.FirstChild, XmlDeclaration) Console.WriteLine(&quot;{0}&quot;, vbNewLine & &quot;XML DECLARTION:&quot;) Console.WriteLine(&quot;{0}&quot;, &quot;Version   &quot; & &quot;= &quot; & decl.Version) Console.WriteLine(&quot;{0}&quot;, &quot;Encoding  &quot; & &quot;= &quot; & decl.Encoding) Console.WriteLine(&quot;{0}&quot;, &quot;Standalone &quot; & &quot;= &quot; & decl.Standalone)

' 3. Move to the first node of DOM and get all of its attributes. Dim root As XmlElement = doc.DocumentElement node = root.FirstChild Dim attr As XmlAttribute Console.WriteLine(&quot;{0}&quot;, vbNewLine & &quot;ATTRIBUTES OF THE FIRST CHILD:&quot;) For Each attr In node.Attributes Console.WriteLine(&quot;{0}&quot;, attr.Name & &quot; = &quot; & attr.InnerText) Next

' 4. Navigate to the child nodes of the first Book node. Dim cNode As XmlNode Console.WriteLine(&quot;{0}&quot;, vbNewLine & &quot;FIRST NODE'S CHILDREN:&quot;) If node.HasChildNodes Then For Each cNode In node.ChildNodes Console.WriteLine(&quot;{0}&quot;, cNode.OuterXml) Next End If

' 5. Navigate to the next sibling of the first Book node. node = node.NextSibling Console.WriteLine(&quot;{0}&quot;, vbNewLine & &quot;NEXT SIBLING:&quot;) If Not node Is Nothing Then Console.WriteLine(&quot;{0}&quot;, node.OuterXml) End If

' 6. Get the parent node details of the current node. Console.WriteLine(&quot;{0}&quot;, vbNewLine & &quot;PARENT NODE NAME = &quot; & node.ParentNode.Name) Console.WriteLine(&quot;{0}&quot;, &quot;PARENT NODE HAS &quot; & node.ParentNode.ChildNodes.Count & &quot; CHILD NODES&quot;) Console.WriteLine(&quot;{0}&quot;, &quot;PARENT NODE'S NAMESPACE URI = &quot; & node.ParentNode.NamespaceURI)

' 7. Count the number of Comment nodes in the document. ' You could search for other types in the same way. Dim commentNodes As Integer = GetNodeTypeCount(doc.DocumentElement, XmlNodeType.Comment) Console.WriteLine(&quot;{0}&quot;, vbNewLine & &quot;NUMBER OF COMMENT NODES IN THE DOC = &quot; & commentNodes & vbNewLine)

Console.ReadLine

Catch xmlex As XmlException                 ' Handle the Xml Exceptions here Console.WriteLine(&quot;{0}&quot;, xmlex.Message) Catch ex As Exception                       ' Handle the generic Exceptions here Console.WriteLine(&quot;{0}&quot;, ex.Message) End Try

End Sub

Function GetNodeTypeCount(ByVal node As XmlNode, ByVal nodeType As XmlNodeType) As Integer

' Recursively loop through the given node and return ' the number of occurences of a specific nodeType. Dim i As Integer = 0 Dim cNode As XmlNode If node.NodeType = nodeType Then i = i + 1 End If     If node.HasChildNodes Then For Each cNode In node.ChildNodes i = i + GetNodeTypeCount(cNode, nodeType) Next End If     GetNodeTypeCount = i

End Function

End Module </li> <li> Compile and then run the application. The output should resemble the following: TITLES LIST: Principle of Relativity Cosmos

XML DECLARTION: Version   = 1.0 Encoding  = ISO-8859-1 Standalone = yes

ATTRIBUTES OF THE FIRST CHILD: Id = 1 ISBN = 1-100000ABC-200

FIRST NODE'S CHILDREN: Principle of Relativity</Title>

Albert Einstein</Author> Physics</Genre>

NEXT SIBLING: <Book Id=&quot;2&quot; ISBN=&quot;1-100000ABC-300&quot;>Cosm os</Title>Carl Sagan</Author>Cosmology</Genre></Book>

PARENT NODE NAME = Collection PARENT NODE HAS 3 CHILD NODES PARENT NODE'S NAMESPACE URI =

NUMBER OF COMMENT NODES IN THE DOC = 3 </li></ol>

back to the top

<div class="references_section">