在 python 中使用撒克逊语

Posted

技术标签:

【中文标题】在 python 中使用撒克逊语【英文标题】:Use saxon with python 【发布时间】:2015-06-09 04:52:44 【问题描述】:

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

【问题讨论】:

【参考方案1】:

有两种可能的方法:

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

    使用 Saxon/C 产品,目前在预发布版中可用:详情请点击:http://www.saxonica.com/saxon-c/index.xml

【讨论】:

@Maliqf,您最终采用了哪种方法?以及您的体验如何 我将 Saxon/C 包装在一个精简的 Boost-Python 包装器中。如果您了解一点 C/C++,这并不难——这只是 Saxon 网站上给出的 C++ 示例之上的一些样板。您可以使用提供的 php API 作为如何构建 Python API 的指南。我这样做是出于上述原因,Python 没有原生的 XSLT 3 支持。它对我来说效果很好 - 特别是它很快,不像分叉子撒克逊进程或 HTTP 请求。【参考方案2】:

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

https://github.com/ajelenak/pysaxon

【讨论】:

【参考方案3】:

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

import subprocess

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

【讨论】:

【参考方案4】:

Saxon/C 版本 1.2.0 现已推出,XSLT 3.0 支持 Python3 请参阅详细信息:

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

【讨论】:

【参考方案5】:

如果您使用的是 Windows:

从http://saxon.sourceforge.net/#F9.9HE 下载 zip 文件 Saxon-HE 9.9 for Java 并将文件解压缩到 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 中使用撒克逊语的主要内容,如果未能解决你的问题,请参考以下文章

使用 Saxon 对 Msi 文件 (xml) 运行 XSL 转换

如何在 Java 中选择撒克逊 TransformerFactory

set aside与put aside ,lay aside 的区别

xslt:撒克逊 9.4 与撒克逊 9.6 中的消息

一代舞王迈克尔杰克逊是怎么死的?

初学Python语言者必须理解的下划线