2012-01-23 15 views
5

in Python 2.6 Ho fatto questo per ottenere una trasformata di xslpython3 e XML/XSLT librerie

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) 
    ... 

Quale sarebbe l'equivalente in Python 3.2?

Chiedo perché sembra che lnxml e libxslt non siano disponibili in python3.2. Ho sentito parlare di lxml - questo è un equivalente diretto di libxml2 + libxslt o ha modelli di chiamata diversi (che richiedono la riscrittura del codice)?

+0

Penso librerie/XSLT libxml2 ora offrono attacchi python3 tramite l'/ argomento 'script configure'' - with-python = $ {PATH_TO_PYTHON3_BINARY} ', eg,'/usr/bin/python3'. – kevinarpe

risposta

1

Poiché queste librerie sono solo involucri attorno C-librerie non dovrebbero essere molto difficile da porto a Python 3.

L'unica alternativa è lxml, che ha un'interfaccia di tipo ElementTree, quindi è di livello superiore e più "pythonic". Non penso che fornisca un'interfaccia diretta alle librerie.

+0

Mentre sono d'accordo con il sentimento di questa risposta, in pratica non è stato così facile per me o per gli altri esibirsi. Comunque vivo nella speranza! –

2

L'analogo del vostro codice usando 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 liste di supporto per Python 3.2

+0

Un suggerimento utile che funziona, ma (finora) non produce esattamente lo stesso risultato del percorso libxml2/libxslt. Tuttavia questo metodo non produce una perdita di memoria - mentre il codice nella mia domanda perde come un setaccio! Investigherò di più su questo. I miei ringraziamenti –

+0

['lxml' usa' libxml2/libxslt' sotto il cofano] (http://lxml.de/installation.html) quindi i risultati dovrebbero essere gli stessi. Usa Cython per generare estensioni C che funzionano sia su Python 2.x che su 3.x dalla stessa fonte, [esempio] (https://github.com/lxml/lxml/blob/master/src/lxml/tree. PXD). – jfs