2012-01-23 13 views
5

en Python 2.6 Hice esto para lograr un TRANFORM XSLpython3 y XML/XSLT bibliotecas

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

¿Cuál sería el equivalente en Python 3.2?

Lo pido porque parece que lnxml y libxslt no están disponibles en python3.2. He oído hablar de lxml: ¿es este un equivalente directo de libxml2 + libxslt o tiene diferentes patrones de llamadas (necesita una reescritura del código)?

+0

Creo bibliotecas/XSLT libxml2 ahora ofrecen fijaciones python3 a través de la '/' argumento guión configure' - with-python = $ {PATH_TO_PYTHON3_BINARY} ', p. ej.,'/usr/bin/python3'. – kevinarpe

Respuesta

1

Desde estas bibliotecas son sólo las envolturas alrededor de C-bibliotecas que no debe ser muy difícil de puerto a Python 3.

La única alternativa es lxml, que tiene una interfaz del tipo elementtree, por lo que es el nivel más alto y más "pitónico". No creo que proporcione una interfaz directa a las bibliotecas.

+0

Si bien estoy de acuerdo con el sentimiento de esta respuesta, en la práctica no ha resultado tan fácil para mí o para otros. Sin embargo, ¡yo vivo con esperanza! –

2

El análogo de su código 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 listas de soporte para Python 3.2

+0

Una sugerencia útil que funciona, pero (hasta ahora) no produce exactamente el mismo resultado que el resultado de la ruta libxml2/libxslt. Sin embargo, este método no produce una pérdida de memoria, ¡mientras que el código en mi pregunta se filtra como un tamiz! Investigaré esto más. Mi agradecimiento –

+0

['lxml' utiliza' libxml2/libxslt' bajo el capó] (http://lxml.de/installation.html) por lo que los resultados deberían ser los mismos. Utiliza Cython para generar extensiones C que funcionan tanto en Python 2.xy 3.x desde la misma fuente, [ejemplo] (https://github.com/lxml/lxml/blob/master/src/lxml/tree). pxd). – jfs