使用 xsl 时 CDATA 未包含在我的 XML 中
Posted
技术标签:
【中文标题】使用 xsl 时 CDATA 未包含在我的 XML 中【英文标题】:CDATA not included in my XML when using xsl 【发布时间】: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。您可能想要更新您的问题标题以更好地反映您当前的问题。 @咪咪
【参考方案1】:
当需要 CDATA
部分时,您需要添加控制 XML 元素值的 cdata-section-elements
属性。它是一个空格分隔的列表,因此您可以添加任意数量的元素名称。
检查一下。
<xsl:output method="xml" indent="yes" cdata-section-elements="code" encoding="utf-8" />
【讨论】:
我添加了cdata-section-elements="code"
,但它似乎仍然不起作用。
不再需要在 VBA 中使用 `Set cdata = doc.createCDATASection("code")'。现在这是 XSLT 的职责。以上是关于使用 xsl 时 CDATA 未包含在我的 XML 中的主要内容,如果未能解决你的问题,请参考以下文章
使用 CDATA 元素对 xml 中的 uuid 进行排序的 xslt 模板
WSO2 AM 1.9 - 将CDATA保留在有效负载工厂中