2012-01-23 12 views
5

私は、Python 3.2で同等のでしょう何のXSL tranformのpython3とXML/XSLTライブラリ

import libxml2 
    import libxslt 
    ... 
    styledoc = libxml2.parseFile(my_xslt_file) 
    style = libxslt.parseStylesheetDoc(styledoc) 
    doc = libxml2.parseDoc(siri_response_data) 
    result = style.applyStylesheet(doc, None) 
    ... 

を達成するためにこれをしませんでしたか?

lnxmlとlibxsltはpython3.2で利用できないようですので、私は尋ねます。私はlxmlのことを聞いたことがあります - これはlibxml2 + libxsltの直接の同等物ですか、それともコードの書き換えが必要な別の呼び出しパターンを持っていますか?

+0

のサポート - with-python = $ {PATH_TO_PYTHON3_BINARY} '、例えば、'/usr/bin/python3'です。 – kevinarpe

答えて

1

これらのライブラリは、彼らは、Python 3

へのポートには非常に難しいことではありませんC-ライブラリの周りだけのラッパーであるため、他の唯一の選択肢は、ElementTreeのタイプのインターフェースを持つlxmlの、であるので、より高いレベルですより多くの "pythonic"。私はそれがライブラリへの直接インタフェースを提供するとは思わない。

+0

私はこの答えの感想に同意しますが、実際には私や他の人が実行するのが容易ではありません。しかし私は希望で生きています! –

2

lxmlを使用してコードのアナログ:。

from lxml import etree 

# ...  
styledoc = etree.parse(my_xslt_file) 
transform = etree.XSLT(styledoc) 
doc = etree.fromstring(siri_response_data) 
result = transform(doc) 
# ... 

lxmlリストは、私はlibxml2の/ XSLTライブラリは現在、 `/ configure`スクリプト引数`経由のpython3のバインディングを提供してだと思うのPython 3.2

+0

有用な提案ですが、(これまでのところ)libxml2/libxsltルートの結果とまったく同じ結果が得られません。しかし、このメソッドはメモリリークを発生させません - 私の質問のコードは、ふるいのようなリークですが!私はこれ以上調べます。感謝 –

+0

['lxml'はフードの下で' libxml2/libxslt'を使用します](http://lxml.de/installation.html)ので結果は同じになるはずです。 Cythonを使用して、同じソースからPython 2.xと3.xの両方で動作するC拡張を生成します(例:https://github.com/lxml/lxml/blob/master/src/lxml/tree)。 pxd)。 – jfs