将撒克逊语与 python 一起使用
Use saxon with python
我需要使用 python 处理 XSLT,目前我使用的是仅支持 XSLT 1 的 lxml,现在我需要处理 XSLT 2 有什么方法可以将 saxon XSLT 处理器与 [=13= 一起使用]?
有两种可能的方法:
设置接受转换请求的 HTTP 服务,并通过从 Java 调用 Saxon 来实现它们;然后,您可以通过 HTTP
从 Python 发送转换请求
使用 Saxon/C 产品,目前在预发行版 上可用:此处详细信息:http://www.saxonica.com/saxon-c/index.xml
Saxon/C 的 Python 界面正在开发中,值得一看:
目前没有,但您可以使用 subprocess module 来使用 Saxon 处理器:
import subprocess
subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])
Saxon/C 1.2.0 版现已发布,支持 XSLT 3.0 Python3 查看详细信息:
如果您使用 Windows:
从 http://saxon.sourceforge.net/#F9.9HE 下载 Java 的压缩文件 Saxon-HE 9.9 并将文件解压缩到 C:\saxon
使用此 Python 代码:
import os
import subprocess
def file_path(relative_path):
folder = os.path.dirname(os.path.abspath(__file__))
path_parts = relative_path.split("/")
new_path = os.path.join(folder, *path_parts)
return new_path
def transform(xml_file, xsl_file, output_file):
"""all args take relative paths from Python script"""
input = file_path(xml_file)
output = file_path(output_file)
xslt = file_path(xsl_file)
subprocess.call(f"java -cp C:\saxon\saxon9he.jar net.sf.saxon.Transform -t -s:{input} -xsl:{xslt} -o:{output}")
我需要使用 python 处理 XSLT,目前我使用的是仅支持 XSLT 1 的 lxml,现在我需要处理 XSLT 2 有什么方法可以将 saxon XSLT 处理器与 [=13= 一起使用]?
有两种可能的方法:
设置接受转换请求的 HTTP 服务,并通过从 Java 调用 Saxon 来实现它们;然后,您可以通过 HTTP
从 Python 发送转换请求
使用 Saxon/C 产品
,目前在预发行版上可用:此处详细信息:http://www.saxonica.com/saxon-c/index.xml
Saxon/C 的 Python 界面正在开发中,值得一看:
目前没有,但您可以使用 subprocess module 来使用 Saxon 处理器:
import subprocess
subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])
Saxon/C 1.2.0 版现已发布,支持 XSLT 3.0 Python3 查看详细信息:
如果您使用 Windows:
从 http://saxon.sourceforge.net/#F9.9HE 下载 Java 的压缩文件 Saxon-HE 9.9 并将文件解压缩到 C:\saxon
使用此 Python 代码:
import os
import subprocess
def file_path(relative_path):
folder = os.path.dirname(os.path.abspath(__file__))
path_parts = relative_path.split("/")
new_path = os.path.join(folder, *path_parts)
return new_path
def transform(xml_file, xsl_file, output_file):
"""all args take relative paths from Python script"""
input = file_path(xml_file)
output = file_path(output_file)
xslt = file_path(xsl_file)
subprocess.call(f"java -cp C:\saxon\saxon9he.jar net.sf.saxon.Transform -t -s:{input} -xsl:{xslt} -o:{output}")