首页 > 解决方案 > Saxon-HE XSLT 中的序列化

问题描述

我正在使用 XSLT 执行 json 到 json 的转换..

[
    {
        "fileName": "file1.xml",
        "value": [
            {
                "data1": [
                    {
                        "data2": [
                            {
                                "data3": [
                                    {
                                        "data4": [
                                            {
                                                "tag1": [
                                                    "df"
                                                ],
                                                "tag2": [
                                                    "fg"
                                                ],
                                                "tag3": [
                                                    "ss"
                                                ]
                                            },
                                            {
                                                "tag1": [
                                                    "fg"
                                                ],
                                                "tag2": [
                                                    "ss"
                                                ],
                                                "tag3": [
                                                    "df"
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }]

为了对 json 对象中的标签进行排序,我尝试使用 saxon:property-order.. 但在我的情况下它不支持。

因为我使用的是 Saxon-HE 10.01 版本。

这是我的 xslt 样式表

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jlib="http://saxonica.com/ns/jsonlib"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
xmlns:saxon="http://saxon.sf.net/"

version="3.0">
<xsl:param name="input"/>
<xsl:output method="json"/>

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

<xsl:output method="json" indent="yes" saxon:property-order="tag1 tag2 tag3"/>
<xsl:template name="xsl:initial-template">
<xsl:variable name="in" select="parse-json($input)"/>

<xsl:variable name="out" as="map(*)*">

<xsl:for-each-group select="$in?*" group-by="?fileName">
<xsl:map>
<xsl:map-entry key="'fileName'" select="current-grouping-key()"/>
<xsl:map-entry key="'value'" select="map{'data1':array{map {'data2':array{map {'data3':array {map{'data4': array:join(current-group()?value?*?data1?*?data2?*?data3?*?data4)}}}}}}}"/>
</xsl:map>
</xsl:for-each-group>
</xsl:variable>

<xsl:sequence select="array{$out}"/>
</xsl:template>


</xsl:stylesheet>

我从 java 代码中得到以下异常:-

xsl 错误:第 11 行第 516 列输出 XTSE0020 序列化参数 Q{.../saxon.sf.net/}property-order 在 Saxon-HE 中不可用

如何在 saxon-he 10.. 中使用属性顺序或 saxon-he 中的任何其他功能来执行属性顺序机制/排序机制?

标签: javaxsltsaxon

解决方案


推荐阅读