You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA生成XML使用XSL转换时CDATA标签丢失问题如何解决?

问题根因

CDATA丢失问题本质是MSXML处理器的特性导致:当XSLT转换结果输出到DOMDocument对象时,处理器会自动将CDATA节解析为普通文本节点存储,后续读取该DOM的XML属性时自然不会保留CDATA标签。直接打印原始DOM的XML正常,就是因为没有经过这层转换解析。

解决方案

方案1:直接输出转换结果为字符串

不要将转换结果存入DOM对象,改用transformNode方法直接获取转换后的字符串,再写入文件即可:

' 加载XSL文件
Dim xslDoc As New MSXML2.DOMDocument60
xslDoc.async = False
xslDoc.Load "你的XSL文件路径" ' 也可以直接加载XSL字符串

' 直接转换得到字符串,避免DOM解析丢失CDATA
Dim outputXml As String
outputXml = doc.transformNode(xslDoc)

' 直接将outputXml写入目标文件即可,内容会保留CDATA标签
Debug.Print outputXml

方案2:确认XSLT配置正确

检查XSLT确保满足以下要求:

  • cdata-section-elements指定的节点名与实际元素名完全大小写一致(XML为大小写敏感规范)
  • 如果元素带命名空间,需要在XSLT中声明命名空间前缀,并将前缀添加到cdata-section-elements属性中(无命名空间场景可忽略本条)

方案3:调整DOM初始化参数

创建原始DOM对象时添加如下配置,确保DOM节点结构在转换前完整保留:

Dim doc As New MSXML2.DOMDocument60
doc.async = False
doc.preserveWhiteSpace = True ' 保留节点空格与结构

内容的提问来源于stack exchange,提问作者Mimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:15:05