【发布时间】:2022-01-07 20:51:16
【问题描述】:
我目前正在做一个小项目,通过 VBA 将数据从 MS Access 导出为 XML 格式。我有一个部分应该在其中添加带有 CDATA 标记的代码。
但是,当我尝试实现它时,我的代码中缺少 CDATA 部分。这是我到目前为止所得到的:
Dim doc As New MSXML2.DOMDocument60
Dim rulescript As IXMLDOMElement
Dim code As IXMLDOMElement
Dim cdata As IXMLDOMCDATASection
'Append ruleScript
Set rulescript = doc.createElement("ruleScript")
doc.appendChild rulescript
'Append code
Set code = doc.createElement("code")
rulescript.appendChild code
'Create code and append it as CDATA section
Set cdata = doc.createCDATASection("code")
cdata.Data = "this is a dummy code."
code.appendChild cdata
XLS:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"
cdata-section-elements="code" encoding="UTF-8"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这就是它的样子:
<ruleScript>
<code><![CDATA[this is a dummy code.]]></code>
</ruleScript>
但不幸的是,结果是这样的,没有 CDATA:
<ruleScript>
<code>this is a dummy code.</code>
</ruleScript>
我环顾四周,找不到我的解决方案,因此我将不胜感激。
编辑: 看了一会儿,我意识到问题不是代码的实现。问题是我用来保存文档的xsl:
出于某种原因,如果我只使用
Debug.Print doc.XML
,它工作得很好。我还没弄清楚为什么会这样。
【问题讨论】:
-
rootNode 只是我之前创建的另一个节点。我没有意识到这可能会引起混乱。我会编辑它
-
这对我有用:
Debug.Print doc.XML给了<ruleScript><code><![CDATA[this is a dummy code.]]></code></ruleScript> -
和蒂姆一样,我试过
doc.Save,结果文件也是正确的。如果你只使用这段代码,你会遇到同样的问题吗? -
哦,如果我只使用块代码,它也适用于我。我想它一定是其他的东西不起作用。
-
我不熟悉 XML(事实上,我几乎不使用它们!)所以一个快速的谷歌给出了this。您可能想要更新您的问题标题以更好地反映您当前的问题。 @咪咪