2016-11-11 5 views
0

誰でもXML変換用にXSLTを提供できますか?xmlノードからJSONArray文字列を解析するXSLT

入力: -

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

Ouptut: - :

<?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>のノードをカプセル化し

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

答えて

0

一つの解決策はこのことでしょうJSON文字列を2つの部分に分割します。

結果は次のとおりです。XSLT 3.0で

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

次の操作を行うことができます

<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入力に見つけるかもしれない正確に何に依存します。