Forcing MSXML to format XML output with indents and newlines

前端 未结 4 523
不思量自难忘°
不思量自难忘° 2021-01-01 04:40

I am using MSXML 3.0 with Visual Basic 6 to store and retrieve configuration of my application. When saving the resulting DOMDocument to a XML file the root obj

4条回答
  •  没有蜡笔的小新
    2021-01-01 05:41

    For such tiny files as a config the overhead of using XSL probably isn't significant anyway. The power of SAX is more important when you're dealing with large files or tons of small ones such as the server side of a Web Service - and there you probably should not be using the heavyweight DOM in the first place.

    Private Sub FormatDocToFile(ByVal Doc As MSXML2.DOMDocument, _
                                ByVal FileName As String)
        'Reformats the DOMDocument "Doc" into an ADODB.Stream
        'and writes it to the specified file.
        '
        'Note the UTF-8 output never gets a BOM.  If we want one we
        'have to write it here explicitly after opening the Stream.
        Dim rdrDom As MSXML2.SAXXMLReader
        Dim stmFormatted As ADODB.Stream
        Dim wtrFormatted As MSXML2.MXXMLWriter
    
        Set stmFormatted = New ADODB.Stream
        With stmFormatted
            .Open
            .Type = adTypeBinary
            Set wtrFormatted = New MSXML2.MXXMLWriter
            With wtrFormatted
                .omitXMLDeclaration = False
                .standalone = True
                .byteOrderMark = False 'If not set (even to False) then
                                       '.encoding is ignored.
                .encoding = "utf-8"    'Even if .byteOrderMark = True
                                       'UTF-8 never gets a BOM.
                .indent = True
                .output = stmFormatted
                Set rdrDom = New MSXML2.SAXXMLReader
                With rdrDom
                    Set .contentHandler = wtrFormatted
                    Set .dtdHandler = wtrFormatted
                    Set .errorHandler = wtrFormatted
                    .putProperty "http://xml.org/sax/properties/lexical-handler", _
                                 wtrFormatted
                    .putProperty "http://xml.org/sax/properties/declaration-handler", _
                                 wtrFormatted
                    .parse Doc
                End With
            End With
            .SaveToFile FileName
            .Close
        End With
    End Sub
    

提交回复
热议问题