Как грамотно переписать скрипт Python, который раньше использовал XSLT? - PullRequest
5 голосов
/ 03 июня 2011

У меня есть старое приложение на python, которое использовало XSLT для преобразования некоторых XML-данных (двух типов XML-файлов с соответствующими им xslt-файлами) для получения html-вывода.

Я бы хотел перенести это приложение на appengine, но, к сожалению, версия python для appengine не поддерживает xslt.

Есть ли простой способ переписать мой код, не анализируя вручную и не проверяя наличие заданных тегов во входных данных xml?

Другими словами, у вас есть какой-нибудь общий способ сделать это?

Спасибо и извините за мой плохой английский!

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

К сожалению, в чистом Python нет работающей XSLT-реализации.Возможно, вы сможете адаптировать свой код Python для работы на Jython, что даст вам доступ к реализации XSLT в Java.Это описано в этом сообщении в блоге .

Вам нужно будет решить, является ли перенос / тестирование существующего кода на jython лучшим вариантом, чем написание вашего собственного xml-анализатора / трансформера для конкретного случая.

0 голосов
/ 04 июня 2011

Если ваши XSLT не слишком отвратительные, может быть не очень сложно перенести их на Python с помощью функции iterparse ElementTree (http://effbot.org/zone/element-iterparse.htm, и см. http://www.dalkescientific.com/writings/diary/archive/2006/11/06/iterparse_filter.html).

Вам придется переписать ваши шаблоны XSLT как функции Python, которые могут быть вызваны во время синтаксического анализа при обнаружении элемента «события», и вам может потребоваться сохранить некоторое состояние документа, чтобы разрешить определенные виды шаблонов xsl: template / @ matchобработано, но это, вероятно, не будет слишком неприятным.

0 голосов
/ 03 июня 2011

Вы можете использовать lxml для выполнения преобразований XSLT, И lxml должен работать со старыми версиями Python (веб-сайт сообщает, что поддерживает 2.3 - 3.2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...