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
相关产品推荐
相关产品推荐

