Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT将嵌入式JSON转换为XML_Json_Xml_Xslt - Fatal编程技术网

使用XSLT将嵌入式JSON转换为XML

使用XSLT将嵌入式JSON转换为XML,json,xml,xslt,Json,Xml,Xslt,使用XSLT转换XML文档时,是否可以在转换过程中转换嵌入的JSON(即JSON格式的内容) 例如:- <form> <data>[{"id":1,"name":"Hello"},{"id":2,"name":"World"}]</data> </form> [{“id”:1,“name”:“Hello”},{“id”:2,“name”:“World”}] 将转换为:- <form> <data>

使用XSLT转换XML文档时,是否可以在转换过程中转换嵌入的JSON(即JSON格式的内容)

例如:-

<form>
    <data>[{"id":1,"name":"Hello"},{"id":2,"name":"World"}]</data>
</form>

[{“id”:1,“name”:“Hello”},{“id”:2,“name”:“World”}]
将转换为:-

<form>
    <data>
        <id name="Hello">1</id>
        <id name="World">2</id>
    </data>
</form>

1.
2.

在XSLT 3.0中应该是可能的,因为它有一个从json到xml的

解析以JSON文本形式提供的字符串,返回 结果以XML文档节点的形式出现


您可以尝试在中的当前实现中运行它。

解析JSON在XSLT 3.0中受支持,因此使用Saxon 9.7的商业版本可以使用

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:math="http://www.w3.org/2005/xpath-functions/math"
    exclude-result-prefixes="xs math"
    version="3.0">

    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:mode on-no-match="shallow-copy"/>

    <xsl:template match="data">
        <xsl:copy>
            <xsl:apply-templates select="parse-json(.)?*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match=".[. instance of map(xs:string, item())]">
        <id name="{.?name}">
            <xsl:value-of select=".?id"/>
        </id>
    </xsl:template>

</xsl:stylesheet>

Saxon 9.7他在Maven和

上可用,谢谢,但我担心商业报价超出了我的项目范围。。我希望有一个XSLT 2.0解决方案(Oracle 11gR2数据库中受支持的版本)或一种替代方法,通过导入jar或其他任何东西来支持Oracle数据库中的XSLT 3.0。@AlbPuado,我添加了一个示例,可用于Saxon 9.7的开源HE版,它使用另一个答案中已经建议的函数
json-to-xml
。至于Oracle和XSLT 2,恐怕我不熟悉它,它的特性如扩展功能,考虑用特定的标签来标记您的问题,如果您正在该环境中寻找解决方案,可能比其他熟悉它的人可以告诉您是否有扩展功能来解析和处理JSON。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
    xmlns:math="http://www.w3.org/2005/xpath-functions/math"
    exclude-result-prefixes="xs math fn"
    version="3.0">

    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="data">
        <xsl:copy>
            <xsl:apply-templates select="json-to-xml(.)//fn:map"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="fn:map">
        <id name="{fn:string[@key = 'name']}">
            <xsl:value-of select="fn:number[@key = 'id']"/>
        </id>
    </xsl:template>

</xsl:stylesheet>