如何在XSL中遍历JSON对象?求正确实现方案
XSLT 3.0遍历JSON对象值的正确方法
你之前的写法无效的核心问题是:直接遍历存储JSON字符串的属性节点,且错误使用未定义的$Title/$ID变量——属性里的内容是JSON格式的字符串,不是XPath可直接访问的结构化数据,必须先解析成XPath能处理的map/array结构。
解决步骤
- 解析JSON字符串:用XPath 3.1的
parse-json()函数,把属性中的JSON字符串转为XSLT可操作的map(对应JSON对象)或array(对应JSON数组)。 - 遍历/访问结构化数据:根据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
相关产品推荐
相关产品推荐

