2012-01-23 39 views
5

在Python 2.6中我這樣做,以實現一個XSL變換分析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) 
    ... 

什麼是在Python 3.2的相同呢?

我問,因爲它似乎lnxml和libxslt不可用在python3.2。我聽說過lxml - 這是libxml2 + libxslt的直接等價物還是具有不同的調用模式(需要重寫代碼)?

+0

支持,我認爲現在的libxml2/XSLT庫通過'/ configure'腳本參數'提供Python3綁定 - with-python = $ {PATH_TO_PYTHON3_BINARY}',例如'/ usr/bin/python3'。 – kevinarpe

回答

1

由於這些庫都只是包裝圍繞C-庫,他們不應該是很困難的端口到Python 3

唯一的其他選擇是lxml的,其中有ElementTree的類型的接口,所以它的較高水平和更多「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列出的Python 3.2

+0

一個有用的建議 - 但(到目前爲止)不會產生與libxml2/libxslt路由結果完全相同的結果。但是,這種方法不會產生內存泄漏 - 而我的問題中的代碼就像篩子一樣泄漏!我會進一步調查。我的感謝 –

+0

['lxml'使用'libxml2/libxslt')(http://lxml.de/installation.html),所以結果應該是一樣的。它使用Cython生成C擴展,這些擴展可以在來自同一個源代碼的Python 2.x和3.x上運行[示例](https://github.com/lxml/lxml/blob/master/src/lxml/tree。 PXD)。 – jfs