Search code examples
vb6msxmlpretty-print

How can I pretty-print XML source using VB6 and MSXML?


I've been looking after this for months now and I mostly found sites asking the same question.

The answers I did found were always for .NET or C++ or involved XSLT.


Solution

  • After months of research I've come up with this.

    Public Function PrettyPrintXML(XML As String) As String
    
      Dim Reader As New SAXXMLReader60
      Dim Writer As New MXXMLWriter60
    
      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
    

    Using a document:

    Public Function PrettyPrintDocument(Doc As DOMDocument60) As String
      PrettyPrintDocument = PrettyPrintXML(Doc.XML)
    End Function