2012-01-23 2 views
5

В Python 2.6 Я сделал это, чтобы достичь Xsl tranformPython3 и 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 теперь предлагают Python3 привязок через '/ configure' аргумент сценария' - с-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