首页 > 解决方案 > XML如何在PCDATA之后插入换行符

问题描述

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

<?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
    ...

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

标签: xmlformattingvb6

解决方案


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

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

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

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

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

oMXXMLWriter.indent = True 

推荐阅读