如何在XSLT中解析JSON字符串并提取指定键的对应值
XSLT提取JSON指定字段值实现方案
前置注意
你存放在<vtemp>节点内的JSON文本使用单引号包裹键名和值,不符合标准JSON的双引号规范,所有解析逻辑都需要先做单引号转双引号的处理,避免解析报错。
方案一:XSLT 3.0 原生解析(推荐,适配所有合法JSON结构)
XSLT 3.0 内置JSON解析能力,不需要引入外部依赖,稳定性最高:
<!-- 读取vtemp节点内的原始文本,将单引号替换为标准JSON要求的双引号 --> <xsl:variable name="jsonRawText" select="replace(vtemp, "'", '"')"/> <!-- 将JSON文本解析为可直接取值的XDM Map结构 --> <xsl:variable name="jsonData" select="parse-json($jsonRawText)"/> <!-- 直接传入Banana字段值做判断即可 --> <xsl:if test="normalize-space($jsonData?Banana) = 'yes'"> <!-- 此处写你的业务逻辑代码 --> </xsl:if>
只要运行环境支持XPath 3.1及以上版本,就可以直接通过?键名的语法从解析后的Map里取对应字段值,不需要额外处理字符串。
方案二:低版本XSLT(1.0/2.0)字符串截取方案
如果你的运行环境不支持XSLT 3.0,且当前JSON是固定的单层无嵌套结构,可以直接用内置字符串函数截取目标值,不需要引入第三方解析库:
<!-- 读取vtemp节点内的文本,先做基础空格清理 --> <xsl:variable name="vtempText" select="normalize-space(vtemp)"/> <!-- 截取'Banana'键名之后的文本段 --> <xsl:variable name="segmentAfterBanana" select="substring-after($vtempText, "'Banana':")"/> <!-- 提取两个单引号包裹的内容,清理前后空格后就是Banana的对应取值 --> <xsl:variable name="bananaVal" select="normalize-space(substring-before(substring-after($segmentAfterBanana, "'"), "'"))"/> <!-- 传入判断逻辑 --> <xsl:if test="$bananaVal = 'yes'"> <!-- 此处写你的业务逻辑代码 --> </xsl:if>
注意:字符串截取方案仅适配当前给出的固定结构简单JSON,如果后续JSON出现嵌套、转义字符、键名顺序调整的情况,优先升级XSLT版本使用原生JSON解析方案,避免匹配失效。
内容的提问来源于stack exchange,提问作者Veera Induvasi
相关产品推荐
相关产品推荐

