Sub Tester()
Dim XML As Object, rt As Object, nd As Object, i As Long, n As Long
Set XML = EmptyDocument()
Set rt = CreateWithAttributes(XML, "Root", "", Array("name", ""))
XML.appendchild rt
For i = 1 To 3
Set nd = CreateWithAttributes(XML, "config", "", Array("type", "Typ" & i))
rt.appendchild nd
For n = 1 To 4
nd.appendchild _
CreateWithAttributes(XML, "item", "", _
Array("name", "It's a Test " & n))
Next n
Next i
Debug.Print PrettyPrintXML(XML.XML)
End Sub
' ### everything below here is a utility method ###
'Utility method: create and return an element, with
' optional value and attributes
Function CreateWithAttributes(doc As Object, elName As String, _
elValue As String, Optional attr As Variant = Empty) As Object
Dim el, u, i As Long, att As Object, txt As Object
'create the node
Set el = doc.CreateNode(1, elName, "")
'if have attributes, loop and add
'passed in as Array(attr1Name, attr1Value, attr2Name, attr1Value,...)
If Not IsEmpty(attr) Then
For i = 0 To UBound(attr) Step 2
Set att = doc.CreateAttribute(attr(i))
att.Value = attr(i + 1)
el.Attributes.setNamedItem att
Next i
End If
'any element content to add?
If Len(elValue) > 0 Then
Set txt = doc.createTextNode(elValue)
el.appendchild txt
End If
Set CreateWithAttributes = el
End Function
'create and return an empty xml doc
Function EmptyDocument() As Object
Dim XML
Set XML = CreateObject("MSXML2.DOMDocument")
XML.LoadXML ""
XML.appendchild XML.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
Set EmptyDocument = XML
End Function
'https://stackoverflow.com/questions/1118576/how-can-i-pretty-print-xml-source-using-vb6-and-msxml
Public Function PrettyPrintXML(XML As String) As String
Dim Reader As Object 'New SAXXMLReader60
Dim Writer As Object 'New MXXMLWriter60
Set Reader = CreateObject("MSXML2.SAXXMLReader.6.0")
Set Writer = CreateObject("MSXML2.MXXMLWriter.6.0")
Writer.indent = True
Writer.standalone = False
Writer.omitXMLDeclaration = False
Writer.Encoding = "utf-8"
Set Reader.contentHandler = Writer
Set Reader.dtdHandler = Writer
Set Reader.errorHandler = Writer
Call Reader.putProperty("http://xml.org/sax/properties/declaration-handler", _
Writer)
Call Reader.putProperty("http://xml.org/sax/properties/lexical-handler", _
Writer)
Call Reader.Parse(XML)
PrettyPrintXML = Writer.output
End Function