2016-11-11 34 views
0

任何人都可以爲我提供用於XML轉換的XSLT。從xml節點解析JSONArray字符串的XSLT

輸入: -

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

Ouptut: -

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

回答

0

一個解決辦法是這樣的:

<?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>節點節點並將JSON字符串分成兩部分。

結果是:

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

在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輸入發現,如果它是從你的例子不同。