求助:使用XSLT 2.0将XML标签内的JSON解析为独立XML标签
XSLT 2.0 实现指定JSON到XML的转换
需求回顾
输入是包裹在<code>标签内的JSON字符串,结构包含successful字段、空errors数组和elements对象数组;输出需为<code>标签包裹的XML,保留<successful>标签,每个elements数组元素对应一个<elements>标签(内含<code>和<channelProcessingTime>子标签),忽略errors数组。
输入示例
<code>{"successful": true, "errors": [], "elements": [{"code": "ORD-001", "channelProcessingTime": 89}, {"code": "ORD-002", "channelProcessingTime": 124}]}</code>
预期输出
<code> <successful>true</successful> <elements> <code>ORD-001</code> <channelProcessingTime>89</channelProcessingTime> </elements> <elements> <code>ORD-002</code> <channelProcessingTime>124</channelProcessingTime> </elements> </code>
完整XSLT代码
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:json="http://www.w3.org/2005/xpath-functions"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <code> <!-- 提取输入<code>标签内的JSON字符串 --> <xsl:variable name="json-content" select="/code/text()"/> <!-- 将JSON转换为标准中间XML结构 --> <xsl:variable name="converted-xml" select="json-to-xml($json-content)"/> <!-- 直接复制successful节点 --> <xsl:copy-of select="$converted-xml/*[@key='successful']"/> <!-- 遍历elements数组的每个元素,生成目标结构 --> <xsl:for-each select="$converted-xml/*[@key='elements']/*"> <elements> <code><xsl:value-of select="*[@key='code']"/></code> <channelProcessingTime><xsl:value-of select="*[@key='channelProcessingTime']"/></channelProcessingTime> </elements> </xsl:for-each> </code> </xsl:template> </xsl:stylesheet>
代码说明
- JSON转XML核心处理:使用XSLT 2.0内置的
json-to-xml()函数,将JSON字符串转换为带有key属性的中间XML结构(比如JSON的successful字段对应<boolean key="successful">true</boolean>)。 - 保留successful字段:通过
@key='successful'定位节点,直接复制到输出中。 - 处理elements数组:遍历
elements数组对应的子节点(数组的每个元素对应一个XML元素),为每个元素生成<elements>标签,并提取内部的code和channelProcessingTime字段值。 - 忽略errors数组:代码中未对
errors节点做任何处理,自然实现忽略效果。
内容的提问来源于stack exchange,提问作者Khan Vaqui
相关产品推荐
相关产品推荐

