XSLT从xml节点解析JSONArray字符串



谁能给我提供用于XML转换的XSLT ?

输入

: -

<RootElement>
    <JSON>[{"51000510000000000008":"Registro guardado exitosamente."}]</JSON>
</RootElement>

Ouptut: -

<Root>  
    <pair>
        <key>51000510000000000008</key>
        <value>Registro guardado exitosamente.</value>
    </pair>
</Root>

在XSLT 3.0中可以做以下操作:

<xsl:function name="f:process-kv-pair">
  <xsl:param name="key" as="xs:anyAtomicValue"/>
  <xsl:param name="value" as="item()*"/>
  <pair>
    <key>{$key}</key>
    <value>{$value}</value>
  </pair>
</xsl:function>
<xsl:template match="JSON">
  <xsl:for-each select="parse-json(.)?*">
    <xsl:sequence select="map:for-each-pair(., f:process-kv-pair#2)"/>
  </xsl:for-each>
</xsl:template>

具体细节取决于JSON输入中与示例不同的内容。

一个解决方案是:

<?xml version = "1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
  <xsl:template match="/RootElement">
    <Root>
      <pair>
        <xsl:apply-templates select="JSON" />
      </pair>
    </Root>
  </xsl:template>
  <xsl:template match="JSON">
    <xsl:variable name="inner"  select="substring-before( substring-after(.,'[{'), '}]')" />
    <xsl:variable name="sKey"   select="substring-before( $inner,':')" />
    <xsl:variable name="sValue" select="substring-after ( $inner,':')" />
    <key><xsl:value-of select="substring-before(substring-after ($sKey, '&quot;'), '&quot;')" /></key>
    <value><xsl:value-of select="substring-before(substring-after ($sValue, '&quot;'), '&quot;')" /></value>
  </xsl:template>
</xsl:stylesheet>

将所有<JSON>节点封装在<pair>节点中,并将json字符串分成两部分。

结果是:

<?xml version="1.0"?>
<Root>
    <pair>
        <key>51000510000000000008</key>
        <value>Registro guardado exitosamente.</value>
    </pair>
</Root>

相关内容

  • 没有找到相关文章

最新更新