reading xml files in vb6
You can do it with MSXML, which offers similar functionality as some of the .NET XML APIs. I don't have a copy of VB6 right now, but it's pretty easy. First, add a reference to MSXML from you VB6 project. You would then do something like the following:
- Create an instance of MSXML2.DOMDocument
- Call the Load method to parse the XML file
- Call the
selectNodes("/Report/Categories/Category")
. This will return an IXMLDOMNodeList object. - You can then loop through the node list retrieving each IXMLDOMNode via item or nextNode.
- You can then get the
name
andvalue
using theattributes
property of the XMLDOMNode or usingselectSingleNode("@name").Text
andselectSingleNode("@value").Text
MSXML is fairly flexible, so there is even shorter syntax that you can use, but the above should work out for you. If you have not already figured it out, I will post the code when I get to a machine with VB6 installed.
UDPATE:
Here is a working example using the XML sample you provided.
Sub ParseXmlDocument()
Dim doc As New MSXML2.DOMDocument
Dim success As Boolean
success = doc.Load(App.Path & "\test.xml")
If success = False Then
MsgBox doc.parseError.reason
Else
Dim nodeList As MSXML2.IXMLDOMNodeList
Set nodeList = doc.selectNodes("/Report/Categories/Category")
If Not nodeList Is Nothing Then
Dim node As MSXML2.IXMLDOMNode
Dim name As String
Dim value As String
For Each node In nodeList
' Could also do node.attributes.getNamedItem("name").text
name = node.selectSingleNode("@name").Text
value = node.selectSingleNode("@value").Text
Next node
End If
End If
End Sub
Use MSXML as advised in this question (and in the article linked by Ardman).
You can use IXMLDOMElement.getAttributeNode to read attributes.
For example this code below reads the sample books.xml file from MSDN and accesses an attribute. You need a reference to a version of Microsoft XML.
Private Sub Form_Load()
Dim xmlDoc As New MSXML2.DOMDocument30
Dim nodeBook As IXMLDOMElement
Dim nodeId As IXMLDOMAttribute
Dim sIdValue As String
xmlDoc.async = False
xmlDoc.Load App.Path & "\books.xml"
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
MsgBox ("You have error " & myErr.reason)
Else
Set nodeBook = xmlDoc.selectSingleNode("//book")
Set nodeId = nodeBook.getAttributeNode("id")
sIdValue = nodeId.xml
MsgBox sIdValue
End If
End Sub