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

如何在XSL中遍历JSON对象?求正确实现方案

XSLT 3.0遍历JSON对象值的正确方法

你之前的写法无效的核心问题是:直接遍历存储JSON字符串的属性节点,且错误使用未定义的$Title/$ID变量——属性里的内容是JSON格式的字符串,不是XPath可直接访问的结构化数据,必须先解析成XPath能处理的map/array结构。

解决步骤

  1. 解析JSON字符串:用XPath 3.1的parse-json()函数,把属性中的JSON字符串转为XSLT可操作的map(对应JSON对象)或array(对应JSON数组)。
  2. 遍历/访问结构化数据:根据JSON的结构(数组/单个对象),用?操作符访问对象的键值。

完整示例代码

假设你的@EscalationHistory属性存储的是JSON数组(比如[{"Title":"工单升级","ID":"E001"},{"Title":"超时提醒","ID":"E002"}]),代码如下:

<xsl:variable name="json-string" select="string(//@EscalationHistory)"/>
<!-- 解析JSON字符串为XPath数组结构 -->
<xsl:variable name="escalation-data" select="parse-json($json-string)"/>

<!-- 遍历数组中的每个对象 -->
<xsl:for-each select="$escalation-data?*">
  <div>
    <span><xsl:value-of select="?Title"/></span>
    <span><xsl:value-of select="?ID"/></span>
  </div>
</xsl:for-each>

如果@EscalationHistory存储的是单个JSON对象(比如{"Title":"工单升级","ID":"E001"}),直接访问即可:

<xsl:variable name="json-string" select="string(//@EscalationHistory)"/>
<xsl:variable name="escalation-data" select="parse-json($json-string)"/>

<div>
  <span><xsl:value-of select="$escalation-data?Title"/></span>
  <span><xsl:value-of select="$escalation-data?ID"/></span>
</div>

关键说明

  • parse-json():XSLT 3.0(配合XPath 3.1)自带的函数,专门用于将JSON字符串转为XPath的结构化数据(map/array)。
  • ?操作符:用于访问map的键或数组的元素,是XPath 3.1中处理JSON结构的标准语法,替代你错误使用的$变量写法。
  • string(//@EscalationHistory):确保把属性节点转为纯字符串,避免parse-json()因参数类型报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:52:47