MXXMLWriter60忽略编码属性

MXXMLWriter60忽略编码属性,xml,vba,encoding,Xml,Vba,Encoding,我将使用MXXMLWriter60和SAXXMLReader60来缩进输出并添加正确的编码标记 输出内容是缩进的,但似乎总是忽略编码属性。为什么? 通过DOMDocument60.Load()加载的输入如下所示: <?xml version="1.0" encoding="iso-8859-15"?> <?xml version="1.0" standalone="no"?> 输出始终如下所示: <?xml version="1.0" encoding="iso

我将使用MXXMLWriter60SAXXMLReader60来缩进输出并添加正确的编码标记

输出内容是缩进的,但似乎总是忽略编码属性。为什么?

通过DOMDocument60.Load()加载的输入如下所示:

<?xml version="1.0" encoding="iso-8859-15"?>
<?xml version="1.0" standalone="no"?>
输出始终如下所示:

<?xml version="1.0" encoding="iso-8859-15"?>
<?xml version="1.0" standalone="no"?>

我知道这个问题已经很老了,但我还是遇到了同样的问题,最后我找到了一个可行的解决方案,我想与大家分享。。。也许它能帮助其他面临同样问题的人

使用ADODB Stream对象作为MXXMLWriter60的输出目标,并使用匹配的编码定义,将生成预期的xml头

Sub prettyPrintXML()

Dim stream As Object
Dim reader As New SAXXMLReader60
Dim writer As New MXXMLWriter60
Dim filename As String

Set stream = CreateObject("ADODB.Stream")
With stream
    .Type = 2
    .Charset = "iso-8859-1"
    .Open
End With

With writer
    .indent = True
    .omitXMLDeclaration = False
    .Encoding = "iso-8859-1"
    .output = stream
End With

Set reader.contentHandler = 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("<rootElement><levelOneItemOne><levelTwoItemOne></levelTwoItemOne></levelOneItemOne><levelOneItemTwo><levelTwoItemOne></levelTwoItemOne><levelTwoItemTwo></levelTwoItemTwo></levelOneItemTwo></rootElement>")

filename = ThisWorkbook.Path & "\prettyPrint.xml"
stream.SaveToFile filename, 2
stream.Close

End Sub
Sub prettyPrintXML()
作为对象的暗流
Dim reader作为新的SAXXMLReader60
Dim writer作为新的MXXMLWriter60
将文件名设置为字符串
Set stream=CreateObject(“ADODB.stream”)
顺流而下
.Type=2
.Charset=“iso-8859-1”
打开
以
与作家
.indent=True
.omitXMLDeclaration=False
.Encoding=“iso-8859-1”
.output=流
以
Set reader.contentHandler=writer
Set reader.errorHandler=writer
调用reader.putProperty(“http://xml.org/sax/properties/declaration-handler“,作者)
调用reader.putProperty(“http://xml.org/sax/properties/lexical-handler“,作者)
调用reader.Parse(“”)
filename=ThisWorkbook.Path&“\prettyPrint.xml”
stream.SaveToFile文件名,2
关闭
端接头
给出了结果

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<rootElement>
    <levelOneItemOne>
        <levelTwoItemOne/>
    </levelOneItemOne>
    <levelOneItemTwo>
        <levelTwoItemOne/>
        <levelTwoItemTwo/>
    </levelOneItemTwo>
</rootElement>

代码库如下所示: