Use saxon with python

前端 未结 5 1735
误落风尘
误落风尘 2020-12-05 20:31

I need to process XSLT using python, currently I\'m using lxml which only support XSLT 1, now I need to process XSLT 2 is there any way to use saxon XSLT processor with pyth

相关标签:
5条回答
  • 2020-12-05 21:05

    A Python interface for Saxon/C is in development and worth a look:

    https://github.com/ajelenak/pysaxon

    0 讨论(0)
  • 2020-12-05 21:13

    There are two possible approaches:

    1. set up an HTTP service that accepts tranformation requests and implements them by invoking Saxon from Java; you can then send the transformation requests from Python over HTTP

    2. use the Saxon/C product, currently available on prerelease: details here: http://www.saxonica.com/saxon-c/index.xml

    0 讨论(0)
  • 2020-12-05 21:18

    If you're using Windows:

    Download the zip file Saxon-HE 9.9 for Java from http://saxon.sourceforge.net/#F9.9HE and unzip the file to C:\saxon

    Use this Python code:

    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}")
    
    0 讨论(0)
  • 2020-12-05 21:25

    Saxon/C release 1.2.0 is now out with XSLT 3.0 support for Python3 see details:

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

    0 讨论(0)
  • 2020-12-05 21:31

    At the moment there is not, but you could use the subprocess module to use the Saxon processor:

    import subprocess
    
    subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])
    
    0 讨论(0)
提交回复
热议问题