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:
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>
<Collection>
<Book Id='1' ISBN='1-100000ABC-200'>
<Title>Principle of Relativity</Title>
<!-- Famous physicist -->
<Author>Albert Einstein</Author>
<Genre>Physics</Genre>
</Book>
<Book Id='2' ISBN='1-100000ABC-300'>
<!-- Also came as a TV serial -->
<Title>Cosmos</Title>
<Author>Carl Sagan</Author>
<Genre>Cosmology</Genre>
</Book>
<!-- Add additional books here -->
</Collection>
- Create a new Visual Basic .NET Console Application
project.
- 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("C:\Q317663.xml")
' 1. Select all the Book titles by using an XPath query.
Dim nodeList As XmlNodeList = doc.SelectNodes("//Book/Title")
Dim node As XmlNode
Console.WriteLine("{0}", "TITLES LIST: ")
For Each node In nodeList
Console.WriteLine("{0}", node.InnerText)
Next
' 2. Read the XmlDeclartion values.
Dim decl As XmlDeclaration = CType(doc.FirstChild, XmlDeclaration)
Console.WriteLine("{0}", vbNewLine & "XML DECLARTION:")
Console.WriteLine("{0}", "Version " & "= " & decl.Version)
Console.WriteLine("{0}", "Encoding " & "= " & decl.Encoding)
Console.WriteLine("{0}", "Standalone " & "= " & 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("{0}", vbNewLine & "ATTRIBUTES OF THE FIRST CHILD:")
For Each attr In node.Attributes
Console.WriteLine("{0}", attr.Name & " = " & attr.InnerText)
Next
' 4. Navigate to the child nodes of the first Book node.
Dim cNode As XmlNode
Console.WriteLine("{0}", vbNewLine & "FIRST NODE'S CHILDREN:")
If node.HasChildNodes Then
For Each cNode In node.ChildNodes
Console.WriteLine("{0}", cNode.OuterXml)
Next
End If
' 5. Navigate to the next sibling of the first Book node.
node = node.NextSibling
Console.WriteLine("{0}", vbNewLine & "NEXT SIBLING:")
If Not node Is Nothing Then
Console.WriteLine("{0}", node.OuterXml)
End If
' 6. Get the parent node details of the current node.
Console.WriteLine("{0}", vbNewLine & "PARENT NODE NAME = " & node.ParentNode.Name)
Console.WriteLine("{0}", "PARENT NODE HAS " & node.ParentNode.ChildNodes.Count & " CHILD NODES")
Console.WriteLine("{0}", "PARENT NODE'S NAMESPACE URI = " & 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("{0}", vbNewLine & "NUMBER OF COMMENT NODES IN THE DOC = " & commentNodes & vbNewLine)
Console.ReadLine()
Catch xmlex As XmlException ' Handle the Xml Exceptions here
Console.WriteLine("{0}", xmlex.Message)
Catch ex As Exception ' Handle the generic Exceptions here
Console.WriteLine("{0}", 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
- 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:
<Title>Principle of Relativity</Title>
<!-- Famous physicist -->
<Author>Albert Einstein</Author>
<Genre>Physics</Genre>
NEXT SIBLING:
<Book Id="2" ISBN="1-100000ABC-300"><!-- Also came as a TV serial --><Title>Cosm
os</Title><Author>Carl Sagan</Author><Genre>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
back to the top