XML and VB. A simple guide.

This article is an introduction to XML and XML programming basics with VB. So if you are an expert in that area, you might want to look at other articles.

INTRO TO XML

Well, you might have started to hear more and more about XML every day. What is XML? It's a standard by which people agreed to describe data. Many things could be described using XML. For example, assume some sort of database server which provides you with the information about your friends and their phone numbers. Let's say you asked the server to show you info of all your friends who are older than 20. The result in XML would be:
                                <Friends>
                                        <Friend>
                                                <Name>John Cusack </Name>
                                                <Phone>555-343-8234</Phone>
                                        </Friend>
                                        <Friend>
                                                <Name>Melissa Earnhardt</Name>
                                                <Phone>555-444-8732</Phone>
                                        </Friend>    
                                </Friends>

                                Example 1

XML has the same structure as HTML documents. The thing to notice about XML is that it has to be well written meaning if there is a starting tag <Friend> there must be an ending tag </Friend>. Now you might ask why would you want to use XML. The answer lies in XML's simple ability to describe data, and also, XML is a plain text and doesn't take up a lot of memory (thus very useful in server communications). XML is winning approval in many areas such as databases, websites, client/server communications.

XML in VB

If you are building an application that uses XML in any way, you app must contain a XML parser. You will use XML parser to write and read XML strings. In industry, there are two types of XML parsers available. One type is based on Document Object Model (DOM) and another is based on Simple API for XML (SAX). DOM parsers have rich set of functions to work on XML documents, making it easy to examine XML documents structure and data inside. One big drawback of DOM parser is that with the increasing size of the XML document, the memory used by the DOM parser is increasing too. SAX parser takes less memory but is harder to use.
In this article, I'll introduce XML programming with Microsoft's DOM parser 3.0 (Example should work with earlier versions). This parser is available for download from Microsoft's website. When DOM parser parses the XML document it creates a tree structure containing the document. As all regular trees (in computer science), DOM tree has a root element, (<Friends> in Example 1 for example). From looking at Example 1, you might also notice that the root has two children: two <Friend> nodes. Each <Friend> node has children of its own: <Name> and <Phone>. Make sure you are familiar with the trees a little bit, that makes DOM programming quite a bit easier.

XML Programming basics

Creating XML
Let's see what code do we need to build XML string shown above in INTRO section. In the following code section, first we create the instance of DOMDocument class that we will call doc. This class is holding your XML tree structure until you are ready to get the XML string out of it. Once you have the instance of that class, a root node is created by using doc.appendChild() method that takes a node as an argument. Once you have a root node, you can attach other nodes (it's children) by calling doc.childNodes(0).appendChild() methods. childNodes(0) indicate that the root element will get nodes attached. You can create a node by itself (for example <Friend> node), and attach it later, like I did for <Friend>, <Name> and <Phone> nodes. Also notice, how value of each node is set, by setting text property to the value you want that node to have. After you are all done with attaching nodes, you get XML version by calling doc.xml. This returns XML string. Notice I have formed only the first part of XML document presented in Example 1, you should try doing the other part for your own practise:

Code (Listing 1):
    Private Sub cmdFormXML_Click()
    Dim doc As DOMDocument
    Dim node As IXMLDOMNode
    Dim namenode As IXMLDOMNode

    Set doc = New DOMDocument 'initializing DOMDocument

    Set node = doc.createNode(NODE_ELEMENT, "Friends", "")
    doc.appendChild node 'attach root node
    Set node = doc.createNode(NODE_ELEMENT, "Friend", "") 'create node Friend
    doc.childNodes(0).appendChild node
    Set namenode = doc.createNode(NODE_ELEMENT, "Name", "")
    namenode.Text = "John Cusack"
    doc.childNodes(0).childNodes(0).appendChild namenode
    Set namenode = doc.createNode(NODE_ELEMENT, "Phone", "")
    namenode.Text = "5553438234"
    doc.childNodes(0).childNodes(0).appendChild namenode

    Text1.Text = doc.xml
    ReadXML (doc.xml)        'calling sub shown in the next section
    Set doc = Nothing
End Sub


Reading XML
With DOM parsers (as well as SAX) you can read XML from the file or a string. If you want to read from the string use DOMDocuments loadXML method and provide XML string. If you want to read xml file, use load method and provide a path to the file containing XML document.

(Lising 2):
Public Sub ReadXML(ByVal xmlstr As String)

Dim doc As DOMDocument
Dim nodelist As IXMLDOMNodeList
Dim node As IXMLDOMNode

Set doc = New DOMDocument
doc.loadXML xmlstr 'load xml string

'output all Names:
Set nodelist = doc.getElementsByTagName("Name")
MsgBox nodelist.length
For Each node In nodelist
MsgBox "Node Name: " + node.nodeName
MsgBox "Node value: " + node.Text
Next node

Set doc = Nothing
Set nodelist = Nothing
Set node = Nothing

End Sub

Some Comments
As you can see, the basic XML programming is very easy. Easier than you thought. But this is just basics, and there is much more to learn. We will try to provide more information on XML and VB in the future articles, and till then let's hope this was a useful introduction into XML world.

Topics - Home

Written By Laimonas Simutis. 2002. laijerrad@yahoo.com