java - 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 中的任何其他功能来执行属性顺序机制/排序机制?
解决方案
推荐阅读
- javascript - GraphQL 参数如何与字段相关联?
- python - 在网站上查找和计算单词的匹配项 - 抓取
- python - SQLAlchemy 和烧瓶的关系
- powershell - 需要帮助在 PowerShell 脚本中将嵌入对象分配给父对象
- python - 如何将三个线图合并为一个共享一个 x 轴但与 matplotlib 具有单独 y 轴的线图?
- python - 导入 tensorflow 会导致 python 3.6.5 错误
- android - 使用 nativescript sidekick 为 android 构建时安装 nativescript-plugin-firebase 后出现错误
- sql - 在 Sybase ASE 中插入主键重复
- google-app-maker - AppMaker Drive.Files.list query for properties
- c# - 如果两个脚本都没有附加到任何游戏对象,我如何从另一个脚本访问脚本?