任何人都可以请我提供XSLT进行XML转换。
输入: -
<RootElement>
<JSON>[{"51000510000000000008":"Registro guardado exitosamente."}]</JSON>
</RootElement>
Ouptut: -
<Root>
<pair>
<key>51000510000000000008</key>
<value>Registro guardado exitosamente.</value>
</pair>
</Root>
答案 0 :(得分:2)
在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输入中可能找到的确切内容,如果它与您的示例不同。
答案 1 :(得分:1)
一个解决方案就是:
<?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>