2009-07-31 2 views
0

В моем приложении я использую 4Suite.org XSLT library для выполнения преобразований исходного XML. Синтаксис таков:XSLT Transform of Unicode source

from Ft.Xml.Xslt import Transform 
transformed_xml = Transform(raw_xml, stylesheet) 

где raw_xml и stylesheet были определены в другом месте в моем приложении. raw_xml будет xml в результате чтения дескриптора файла, открытого с модулем кодеков, так что raw_xml будет unicode.

Проблема заключается в том, что для функции Transform() требуется значение источника xml (raw_xml в моем примере) как ascii. Он говорит так в pydoc, и моя собственная программа выходит из строя с ошибкой вдоль этих строк, если я пытаюсь преобразовать unicode.

Есть ли другой подход или есть другая библиотека python, которая может выполнять преобразование XSLT в отношении источника unicode? Или я что-то не понимаю о трансформациях XSLT?

ответ

2

Я не уверен Transform действительно нуждается ascii - выглядит так, как будто он должен поддерживать любую закодированную Python-страницу. Что произойдет, если вы вызовете Transform(raw_xml.encode('utf8'), stylesheet) (а затем декодируете полученную строку, закодированную в utf8, обратно в Unicode, когда вы закончите ее, конечно, если вам нужен Unicode) - не работает ли это?

+0

Это похоже на трюк. Я тестирую его сейчас, но это кажется многообещающим. Благодаря! – Mike

2

Возможно, вам лучше использовать более современные и активно поддерживаемые lxml.

+0

Я бы * хотел * использовать lxml, но мое приложение уже распространяется на более чем сотнях сайтов, поэтому у меня нет большой гибкости при замене библиотеки xml. Это можно сделать, но сейчас я попытаюсь избежать этого. Теперь, если я когда-нибудь сделаю снимок обновления и рефакторинга этого кода, да, я, вероятно, перейду на lxml для удобства использования и совместимости с etree. – Mike