You need to enable JavaScript to run this app. 使用SaxonEE与Python通过XSLT实现JSON转CSV的方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用SaxonEE与Python通过XSLT实现JSON转CSV的方案咨询

方案结论

你的需求完全可以通过Saxon-EE/C实现,不需要强制切换到Python调用Java的方案,你当前代码的问题是调用逻辑和原Java命令的执行逻辑不匹配。

问题原因

你原Java命令用了-it参数,是从XSLT的初始模板启动转换,没有指定XML输入源;而你用的apply_templates_returning_file方法是匹配输入XML节点的执行模式,配套的set_initial_match_selection方法只支持传入XML文件,自然无法识别JSON输入。

正确实现代码

你的XSLT已经定义了接收JSON的$in参数,只需要先将JSON文件解析为Saxon支持的XDM节点作为参数传入,再调用初始模板执行即可:

from saxonc import PySaxonProcessor
with PySaxonProcessor(license=True) as proc:
    xslt30proc = proc.new_xslt30_processor()
    # 解析JSON文件为XDM节点,传入XSLT的$in参数
    json_input = proc.parse_json(file_name='initial.json')
    xslt30proc.set_parameter("in", json_input)
    # 调用初始模板,对应原Java命令的-it参数
    exec_result = xslt30proc.call_template_returning_file(
        stylesheet_file='styling.xslt',
        output_file='result.csv'
    )
    print(exec_result)

如果你的XSLT初始模板不是默认名称,额外补充template_name参数指定你的模板名即可。

备选方案(调用Java命令)

如果遇到Saxon-C的兼容问题,也可以通过Python的subprocess模块直接调用你原来的Java命令实现调度:

import subprocess
cmd = [
    "java", "-cp", "saxon-ee-10.5.jar",
    "com.saxonica.Transform",
    "-it",
    "-xsl:styling.xslt",
    "-o:result.csv"
]
run_result = subprocess.run(cmd, capture_output=True, text=True, encoding="utf-8")
# 打印执行状态和输出信息
print(f"执行返回码:{run_result.returncode}")
print(f"标准输出:{run_result.stdout}")
print(f"错误输出:{run_result.stderr}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:06:05