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

IE11兼容模式下XSLT转换<image>变<img>的解决求助

解决IE11兼容模式下XML <image>节点被转为<img>的问题

问题原因

IE11兼容模式下,将XML内容输出到HTML的<div>中时,浏览器的HTML解析器会把XML里的<image>识别为HTML的<img>标签(<image>是HTML早期对<img>的别名写法),导致节点被篡改,破坏后续JS解析流程。

解决方案

方法1:用<textarea>替代<div>存储XML

textarea的内容会被当作纯文本处理,不会被HTML解析器转换标签。修改XSLT代码:

<textarea class="hidden" style="display:none;">
    <xsl:copy-of select="/*" />
</textarea>

JS解析时,直接读取textarea的value获取原始XML内容:

const xmlText = document.querySelector('.hidden').value;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, 'text/xml');
// 后续正常解析xmlDoc即可

方法2:将XML转为文本节点插入div

通过XSLT把XML内容转成文本节点,避免HTML解析器识别标签:

<div class="hidden">
    <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
    <xsl:copy-of select="/*" />
    <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
</div>

JS解析时,读取div的文本内容,去掉CDATA包裹后再解析:

const rawContent = document.querySelector('.hidden').textContent;
const xmlText = rawContent.replace(/^\s*<!\[CDATA\[|\]\]>\s*$/g, '');
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, 'text/xml');

方法3:直接在XSLT中导出XML字符串到JS变量

跳过DOM存储,直接把XML内容作为字符串注入到JS变量中,避免HTML解析干扰:

<script type="text/javascript">
    window.rawXml = '<xsl:value-of select="/*" disable-output-escaping="yes" />';
</script>

JS中直接使用这个变量解析:

const parser = new DOMParser();
const xmlDoc = parser.parseFromString(window.rawXml, 'text/xml');

注意事项

  • 所有方法都要确保XML内容的转义处理正确,避免出现语法错误。
  • 因为无法修改后端XML,所有调整都在XSLT和前端JS层面完成,无需改动原始XML结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:14:57