You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Saxon XSLT处理数组结构的JSON输入

针对JSON数组的Saxon XSLT处理方案

针对你提到的以数组开头的JSON,当使用Saxon的-json:myfile.json命令行参数时,Saxon会自动将其转换为带http://www.w3.org/2005/xpath-functions命名空间的XML结构(即你展示的<array>根节点格式),无需手动调用json-to-xml。以下是编写XSLT模板处理该结构的具体方法:

1. 匹配根节点的模板

根节点是命名空间下的<array>元素,必须通过正确的命名空间前缀来匹配:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fn="http://www.w3.org/2005/xpath-functions"> <!-- 绑定JSON转换后的命名空间 -->

    <!-- 匹配转换后的XML根节点:<fn:array> -->
    <xsl:template match="/fn:array">
        <!-- 定义输出的根结构,比如自定义的<events> -->
        <events>
            <!-- 触发对所有子节点(每个<fn:map>,对应JSON里的单个对象)的处理 -->
            <xsl:apply-templates select="fn:map"/>
        </events>
    </xsl:template>

2. 处理子项的模板

接下来编写匹配<fn:map>的模板,处理每个JSON对象:

<!-- 匹配每个<fn:map>节点(对应JSON数组中的单个对象) -->
    <xsl:template match="fn:map">
        <event>
            <!-- 直接提取指定key的字段值 -->
            <event-id><xsl:value-of select="fn:string[@key='eid']"/></event-id>
            <category><xsl:value-of select="fn:string[@key='ecat']"/></category>
            <timestamp><xsl:value-of select="fn:string[@key='day']"/></timestamp>
            <time><xsl:value-of select="fn:string[@key='time']"/></time>
            <title><xsl:value-of select="fn:string[@key='text']"/></title>
            <!-- 其他字段可按同样方式提取 -->
        </event>
    </xsl:template>

</xsl:stylesheet>

3. 关键细节

  • 命名空间必须声明:JSON转换后的所有节点都属于http://www.w3.org/2005/xpath-functions命名空间,因此必须在XSLT中声明该命名空间的前缀(示例中用fn:),否则无法匹配节点。
  • apply-templates的作用:在根节点模板中调用<xsl:apply-templates select="fn:map"/>,会自动遍历所有<fn:map>节点,并触发对应的模板处理每个节点。
  • 灵活扩展:如果需要对所有<fn:string>节点做统一处理,也可以在<fn:map>模板中添加<xsl:apply-templates select="fn:string"/>,再单独编写匹配<fn:string>的模板。

4. 运行命令

使用Saxon命令行工具执行转换:

java -jar saxon-he-12.x.jar -json:myfile.json -xsl:your-transform.xsl -o:output.xml

内容的提问来源于stack exchange,提问作者wknauf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:15:48