The XmlDocument class implements the W3C Document Object Model (DOM) core levels 1 and 2. This class provides random, cached access to the XML data. In other words, the data is held in memory and your program can move forward and backward as needed. Actually, "forward" and "backward" are not really accurate, because the DOM represents XML data as a tree of nodes, so what you are really doing is "walking the tree." The XmlDocument class also permits you to modify the document's data and structure.
You have a lot of flexibility for loading XML into the XmlDocument class: from a string, a stream, a URL, validated XML from an instance of XmlValidatingReader, or partial data (data from a specified node) from an instance of XmlTextReader.
Once the XmlDocument instance is loaded with XML data you "walk the tree," usually starting at the document's root element, as referenced by the class's DocumentElement property. From this element (or any other element) you move around using these class members:
- FirstChild: A reference to the current elementís first child element.
- LastChild: A reference to the current elementís last child element.
- ChildNodes: An XmlNodeList of all the child elements. The list will have length 0 if there are no children.
- NextSibling: A reference to the next sibling element.
- PreviousSibling: A reference to the previous sibling element.
- ParentNode: A reference to the current elementís parent node.
You can create a simple demo program that uses the XmlDocument class to walk through an XML data file, reading the names and values of the elements and attributes and displaying them in a text box. This demo uses the same checkbook data XML file that was shown earlier. To create the demo:
- Start a new Windows Application project. Change the form's Text property to "XmlDocument Demo.".
- Place a TextBox control on the form. Set its properties as follows:
- Resize the TextBox control to fill the width of the form and about two-thirds of its height.
- Add a Button control beneath the TextBox control. Set its properties as follows:
- Place the code from Listing 3 into the Click() event procedure for the button. If necessary, edit the first line so it points to the location of the checkbook.xml file.
Name: txtOutput MultiLine: True Text: (a blank string) ScrollBars: Vertical
Name: btnProcess Text: Process
Listing 3. Demonstrating the XmlDocument Class
Private Sub BtnProcess_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnProcess.Click Dim rdr As New XmlTextReader("checkbook.xml") Dim xmlDoc As New XmlDocument() xmlDoc.Load(rdr) Dim n As XmlNode Dim n1 As XmlNode Dim i As Integer Dim s As String ' Set n to the first
node. n = xmlDoc.DocumentElement.FirstChild Do While True ' Write out this element's attributes. With n.Attributes If .Count > 0 Then For i = 0 To .Count - 1 s &= .Item(i).Name & ": " & .ItemOf(i).Value & vbCrLf Next End If End With ' Set n1 to the first child node (a node). n1 = n.FirstChild Do While Not n1 Is Nothing s &= n1.Name & ": " & n1.InnerText & vbCrLf n1 = n1.NextSibling() Loop n = n.NextSibling() If n Is Nothing Then Exit Do ' A blank line. s &= vbCrLf Loop txtOutput.Text = s End Sub
Other Classes in System.XML
We've looked at three of the most important XML-related .Net classes, but there are many more that cannot be covered here. For example, the XmlTextWriter class lets you create XML output that conforms to the W3C Extensible Markup Language (XML) 1.0 and the Namespaces in XML recommendations. And the XslTransform class transforms XML data using an XSLT stylesheet.
XML is becoming increasingly important as a data storage and transfer standard in many areas of information technology. With the tools provided by the .NET Framework, you should be able to handle essentially any XML-related programming task.