谁能给我提供用于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, '"'), '"')" /></key>
<value><xsl:value-of select="substring-before(substring-after ($sValue, '"'), '"')" /></value>
</xsl:template>
</xsl:stylesheet>
将所有<JSON>
节点封装在<pair>
节点中,并将json字符串分成两部分。
结果是:
<?xml version="1.0"?>
<Root>
<pair>
<key>51000510000000000008</key>
<value>Registro guardado exitosamente.</value>
</pair>
</Root>