【问题标题】:XML how to insert a newline after PCDATAXML如何在PCDATA之后插入换行符
【发布时间】:2025-12-06 11:50:02
【问题描述】:

我对 XML 完全陌生;我刚刚开始使用 VB6 为我的文化研究一些东西(!我知道......!),目前没有真正的目标。在我的第一次尝试中,我得到了一个令人惊讶的好结果,但是有一个小问题,它只会影响视觉输出。 XML 文件的第一行是标准序言:?xml version="1.0" encoding="iso-8859-1"?。第二行是节点DB info,它应该在新行的序言之后,这样:

<?xml version="1.0" encoding="iso-8859-1"?>
<DB>Created on 15/06/2021</DB>

但是,第二行在第一行上继续。我试图插入一个带有换行符的文本节点(如本网站所示),但我收到一个错误,翻译过来是:“'不可能使用 PCDATA 类型的节点执行操作”。我的代码是:

Sub MakeDB()
Dim dom As MSXML2.DOMDocument60
Dim root As IXMLDOMElement
Dim node As MSXML2.IXMLDOMNode

   Set dom = New MSXML2.DOMDocument60
   dom.async = False
   dom.preserveWhiteSpace = True
   
   Set node = dom.createProcessingInstruction("xml", "version='1.0' encoding='iso-8859-1'" + vbNewLine)
   dom.appendChild node
   Set node = Nothing
'the following lines raise the error 
   Set node = dom.createTextNode(vbNewLine)
   dom.appendChild node
   Set node = Nothing

' Create the first element.
    Set root = dom.createElement("DB")   
    Set node = dom.createTextNode("Created on " + CStr(Date))
    root.appendChild node
    Set node = Nothing
    dom.appendChild root
    ...

我意识到这不是一个真正的问题,但我想了解会发生什么。

【问题讨论】:

    标签: xml formatting vb6


    【解决方案1】:

    在创建 content 时,不要关心 XML 声明和文档元素之间的换行符。

    您可以通过Writer的序列化选项控制是否有换行符或输出为一大行:

    https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms764689(v=vs.85)

    设置是否缩进输出。当设置为 True 时,此属性会缩进“漂亮打印”的输出以反映文档的嵌套结构。

    布尔值。读/写。默认值为假。缩进元素的一般规则是: XML 标头和根元素从零缩进的新行开始;元素内容(包括前导和尾随空格)不会以任何方式更改。

    oMXXMLWriter.indent = True 
    

    【讨论】:

    • 我多年来一直在使用this SO solution
    • 我不介意,但是这两行加在一起真的不行,我看到很多XML文档很好,完全格式化。我想知道为什么我找不到让他们分开的方法。声明节点在代码中被破坏了,为什么 VB6 仍然认为它仍然可以访问?您指的 Writer 是 MSXML2.MXHTMLWriter60?我从您的回答中发现了它,并且必须了解它是什么以及它的作用。