使用 SaxonEE 和 Python 使用 XSLT 转换 JSON
Posted
技术标签:
【中文标题】使用 SaxonEE 和 Python 使用 XSLT 转换 JSON【英文标题】:Transforming JSON with XSLT using SaxonEE and Python 【发布时间】:2021-09-09 04:13:38 【问题描述】:我正在尝试编写一个 Python 脚本,用 XSLT 将 JSON 转换为文本文件 (CSV)。
使用 saxon-ee-10.5.jar,我可以通过运行以下命令 (Windows 10) 成功执行所需的转换:
java -cp saxon-ee-10.5.jar com.saxonica.Transform -it -xsl:styling.xslt -o:result.csv
如何使用 Python 实现相同的结果?我一直在尝试使用 Saxon-EE/C,但我不确定我想要发生的事情是否可能。
这是我迄今为止尝试过的一个示例。我的 XSLT 已经为 initial.json 文件定义了一个 $in
参数,但是 PyXslt30Processor.apply_templates_returning_file()
似乎需要调用 PyXslt30Processor.set_initial_match_selection()
,我不确定非 XML 文件是否可以被通过。
from saxonc import PySaxonProcessor
with PySaxonProcessor(license=True) as proc:
xslt30proc = proc.new_xslt30_processor()
xslt30proc.set_initial_match_selection(file_name='initial.json')
content = xslt30proc.apply_templates_returning_file(
stylesheet_file='styling.xslt',
output_file='result.csv'
)
print(content)
我想用 Saxon-EE/C 实现什么,还是应该尝试从 Python 调用 Java 的技术?
【问题讨论】:
【参考方案1】:我认为您想使用 call_template...
而不是应用模板,例如https://www.saxonica.com/saxon-c/doc/html/saxonc.html#PyXslt30Processor-call_template_returning_file 与
xslt30proc.call_template_returning_file(None, stylesheet_file='styling.xslt',
output_file='result.csv'
)
使用None
作为模板名称应该与在命令行中使用-it
相同,即首先调用名为xsl:initial-template
的模板。
在这种情况下不要使用xslt30proc.set_initial_match_selection
。
不过,在调用 call_template_returning_file
之前设置 xslt30proc.set_cwd('.')
可能会有所帮助。
【讨论】:
以上是关于使用 SaxonEE 和 Python 使用 XSLT 转换 JSON的主要内容,如果未能解决你的问题,请参考以下文章
错误:S4s-elt-character:“xs:appinfo”和“xs:documentation”以外的架构元素中不允许使用非空白字符