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

JavaScript调用XSLTProcessor.transformToDocument报错Document is empty如何解决

错误原因

  • XSLT中声明了<xsl:output method="xml"/>,要求输出格式为XML,但实际转换输出的是纯JSON文本,不存在合法的XML根节点,不符合XML格式规范。
  • 浏览器XSLTProcessor的transformToDocument()方法会强制将转换结果解析为标准XMLDocument对象,当输出内容不满足XML格式要求时就会解析失败,返回包含parsererror的XHTML错误文档。
  • 在线测试平台未做强制XML解析,直接输出转换后的原始文本,因此可以正常得到结果。

解决方案

有两种可行方案,可根据业务场景选择:

方案1:改为纯文本输出,直接读取转换结果

  1. 将XSLT中的输出配置修改为文本模式:把<xsl:output method="xml"/>替换为<xsl:output method="text" encoding="UTF-8"/>。
  2. 转换时使用transformToFragment接口读取文本内容,无需解析为XMLDocument:
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
const resultFragment = xsltProcessor.transformToFragment(xml, document);
const resultJson = resultFragment.textContent;
console.log(resultJson);

方案2:包装输出为合法XML结构

如果需要保留method="xml"的配置,可将JSON内容包裹在自定义XML根节点内:
修改XSLT的根匹配模板如下:

<xsl:template match="/">
<root>
{
 "solution": [
 {
   "name" :  "<xsl:value-of select="SOLUTION/CONFIGURATION/@NAME"/>",
   "product" :  "<xsl:value-of select="SOLUTION/CONFIGURATION/INST/@OBJ_KEY"/>",
   "kbname" :  "<xsl:value-of select="SOLUTION/CONFIGURATION/@KBNAME"/>",
   "objects":
   {

  }
  }
  ]
}
</root>
</xsl:template>

转换完成后,从返回的XMLDocument中读取root节点的文本内容,即可得到所需的JSON字符串。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:01