Каков современный способ сделать XML-преобразования в Python? - PullRequest
13 голосов
/ 15 сентября 2011

Мне нужно сделать двунаправленные преобразования между некоторыми довольно сложными форматами XML и плоских файлов в Python.Я устарел и не знаю, как люди решают эту проблему в далеком будущем 2011 году.

Я ознакомился с различными библиотеками Python XML, но это былоПрошло 8 лет с момента моего последнего пребывания в аду XSLT, и я был поражен, когда погуглил о том, что это все еще распространено.

Так как же вы собираетесь делать сложные преобразования XML-данных?

Я бы хотелСделайте это в Python, потому что документы не являются прямыми отображениями и требуется некоторая обработка и расчет.Но я все же хотел бы передать как можно больше движку правил.

Редактировать : Для ясности, я интересуюсь техниками больше, чем конкретными библиотеками или инструментами, нопожалуйста, отправьте те тоже.Я изо всех сил стараюсь избегать здесь словосочетания, но, конечно, это общая проблема.

Правка 2 : Я все еще не думаю, что были какие-либо хорошие ответы по общим методам,но первоначальная проблема, с которой я столкнулся, была решена с использованием инфраструктуры Bots EDI для перевода документов.Он довольно сильно сфокусирован на EDI, но может использоваться для общего перевода.Это было тяжелое решение, хотя.

Ответы [ 4 ]

1 голос
/ 11 апреля 2012

Хотя это полезно только для написания XML, XMLwitch потрясающе. Для выполнения преобразований не-XML в XML я настоятельно рекомендую это!

1 голос
/ 15 сентября 2011

Для python, вот полный список доступных библиотек / модулей XML:

http://wiki.python.org/moin/PythonXml

Если вы ищете что-то более простое, чем XSLT, XMLStarlet представляет собой набор командной строкиинструменты, которые могут вас заинтересовать:

http://xmlstar.sourceforge.net/

Как и любой инструмент командной строки, он не предназначен специально для Python, но может быть легко интегрирован в скрипт Python.

0 голосов
/ 02 июля 2017

Хотя это также «просто» библиотека - или, скорее, фреймворк, inxs - это подход, позволяющий избежать ада XSLT с помощью преобразований на основе правил с Python.

0 голосов
/ 27 марта 2012

Привет, Димитр! Я использую lxml для манипулирования xml в python.

Я опубликовал несколько методов для управления большим количеством XML-схем, пространств имен и т. Д. Автоматическая проверка XSD

Одно из предложений - попытаться использовать полный xpath, когда это возможно..

Например, если бы у меня был сложный тип:

<Person>
 <name/>
 <age/>
</person>

я мог бы столкнуться с проблемой, если бы я не использовал /Person/name и позже, этот сложный тип изменится на:

<person>
 <name/>
 <age/>
 <child>
   <son>
     <name/>
     <age/>
   </son>
</child>
</person>

Причина, по которой теперь имя ', существует в нескольких местах.

Также следует помнить о схемах, которые допускают множество "людей" в этом примере.вам может потребоваться предоставить ключ с вашим xpath, чтобы определить, на кого вы ссылаетесь.в вашем xml может быть 5 или 6 человек, xpaths будут идентичны, но имена уникальны, тогда имя будет вашим ключом для ссылки на каждого конкретного человека.

Я бы также предложил написать свои собственные функции-оболочкивокруг lxml, которые соответствуют вашим потребностям.Я создал файл xmlUtil.py, который содержал необходимые мне xml-функции.Затем я создал файл myXML.py, в котором были предположения о моем конкретном xml и поведении.функции xmlUtil.py принимают только содержимое xml (на тот случай, если я решу использовать что-то вместо lxml, это будет легко изменить).

Надеюсь, что это поможет.Хотелось бы мне быть более полезным, но вопрос очень открытый.

...