使用XSLT 2.0将xml标记中的JSON文件解析为XML分隔标记

igsr9ssn  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(160)

需要xslt 2.0的帮助以达到以下要求。

*输入

<code>"{
  "successful": true,
  "errors": [],
  "elements": [
    {
      "code": "1234567890",
      "channelProcessingTime": 15676456700
    },
    {
      "code": "0987654321",
      "channelProcessingTime": 36509878076
    }
  ]
}"</code>

*必填输出

<code>
    <successful>true</successful>
    <elements>
        <code>1234567890</code>
        <channelProcessingTime>15676456700</channelProcessingTime>
    </elements>
    <elements>
        <code>0987654321</code>
        <channelProcessingTime>36509878076</channelProcessingTime>
    </elements>
</code>

需要xslt 2.0的帮助来实现上述要求。

vnzz0bqm

vnzz0bqm1#

XSLT 3.0中,这是一个微不足道的问题,但首先必须删除JSON代码周围的引号,以获得有效的JSON:

<xsl:stylesheet version="3.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="code">
    <!-- remove surrounding quotes -->
    <xsl:variable name="json" select="replace(., '^&quot;|&quot;$', '')" />
    <code>
        <xsl:apply-templates select="json-to-xml($json)"/>
    </code>
</xsl:template>

<xsl:template match="*[@key]">
    <xsl:element name="{@key}">
        <xsl:apply-templates />
    </xsl:element>
</xsl:template>
    
</xsl:stylesheet>

请注意,如果JSON名称不是有效的XML元素名称,则此操作可能会失败。

相关问题