为什么MSXML中的createProcessingInstruction会生成不完整的输出?

nor*_*rtB 6 xml ms-access msxml access-vba

以下VBA代码生<?xml version="1.0"?>成为输出.

Dim XML As New DomDocument 
Dim pi As IXMLDOMProcessingInstruction

'.... some code that sets the root element of the document

Set pi = XML.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
        XML.insertBefore pi, XML.documentElement
Run Code Online (Sandbox Code Playgroud)

为什么encoding="UTF-8"遗漏了?

bob*_*nce 9

<?xml?> 不是处理指令.<?xml?>结构称为XML声明,并遵循与实际处理指令不同的规则.创建名为"xml"的PI格式不正确; 以'xml'开头的名称是保留的.

要更改prolog的格式,您需要配置XMLWriter,设置'version','encoding'或简单地'omitXMLDeclaration'来完全删除它,这是完全正常的,因为1.0和UTF-8是默认值.


Rob*_*edy 2

无论如何,UTF-8 是默认编码。您指定的内容是多余的,因此序列化程序可能会忽略它。不过,该version字段不是可选字段。如果文件有 XML 声明,则声明必须包含version字段

  • 嗯,感谢您接受我的答案,但我倾向于认为鲍宾斯的答案更好。显然,尽管看起来就像处理指令,但 &lt;?xml 不是处理指令,因此不要为此使用 createProcessingInstruction。 (2认同)