使用 SaxonEE 和 Python 通过 XSLT 转换 JSON
Transforming JSON with XSLT using SaxonEE and Python
我正在尝试编写 Python 脚本,将 JSON 转换为带有 XSLT 的文本文件 (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 的技巧?
我认为您想使用 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('.')
可能会有所帮助。
我正在尝试编写 Python 脚本,将 JSON 转换为带有 XSLT 的文本文件 (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 的技巧?
我认为您想使用 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('.')
可能会有所帮助。