使用saxon和python

时间:2015-04-04 06:13:04

标签: python xslt xslt-2.0 saxon

我需要使用python处理XSLT,目前我正在使用仅支持XSLT 1的lxml,现在我需要处理XSLT 2有没有办法在python中使用saxon XSLT处理器?

5 个答案:

答案 0 :(得分:10)

有两种可能的方法:

  1. 设置一个接受转换请求的HTTP服务,并通过从Java调用Saxon来实现它们;然后,您可以通过HTTP发送转换请求

  2. 使用Saxon / C产品,目前在预发布上提供:详情请点击此处:http://www.saxonica.com/saxon-c/index.xml

答案 1 :(得分:4)

Saxon / C的Python接口正在开发中,值得一看:

https://github.com/ajelenak/pysaxon

答案 2 :(得分:1)

目前还没有,但您可以使用subprocess module来使用Saxon处理器:

import subprocess

subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])

答案 3 :(得分:1)

如果您使用的是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}")

答案 4 :(得分:0)

Saxon / C版本1.2.0现已发布,并支持Python3的XSLT 3.0,请参见详细信息:

http://www.saxonica.com/saxon-c/index.xml