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

XSLT 3.0 局部变量改为全局变量后无法正常取值问题求助

问题根因

XSLT 全局变量在转换任务初始化阶段就会完成计算,此时json-to-xml()转换逻辑尚未执行,原始输入文档中仅存在外层<data>节点包裹的JSON纯文本,不存在你XPath表达式中匹配的带@key属性的节点,因此全局变量计算结果为空。
而局部变量是在匹配//*[@key='facts']的模板执行阶段才计算,此时json-to-xml()已经完成JSON到XML的转换,生成了带@key属性的节点树,因此可以正常匹配到结果。

解决方案

你可以先将JSON转换后的XML结构预存为全局预处理变量,所有业务全局变量都基于这个预处理后的变量定义,即可实现集中管理全局变量的需求,修改后的完整XSLT代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
  <xsl:output method="xhtml" indent="yes" html-version="5"/>
  <xsl:mode on-no-match="shallow-skip"/>

  <!-- 全局预处理:提前将JSON转换为XML节点树 -->
  <xsl:variable name="jsonXml" select="json-to-xml(/data)"/>

  <!-- 全局业务变量统一基于预处理后的节点树定义 -->
  <xsl:variable name="headings" select="$jsonXml//*[@key='xbrl:concept'][. = 'se:CompanyName']/../*[@key='value']"/>

  <!-- 入口模板直接处理预处理后的XML节点 -->
  <xsl:template match="/">
    <xsl:apply-templates select="$jsonXml/*"/>
  </xsl:template>

  <xsl:template match="//*[@key='facts']">
    <xsl:value-of select="$headings"/>
  </xsl:template>
</xsl:stylesheet>

修改后运行即可输出预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:06:05