Подтвердить что ты не робот

Каков современный способ сделать преобразования XML в Python?

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

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

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

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

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

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

4b9b3361

Ответ 1

Для python здесь приведен полный список доступных XML-модулей/модулей:

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

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

http://xmlstar.sourceforge.net/

Как любой инструмент командной строки, это особенно не касается Python, но его можно легко интегрировать в python script.

Ответ 2

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

Ответ 3

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

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

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

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

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

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

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

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

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

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

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

Ответ 4

Хотя это также "просто" библиотека, а точнее структура, inxs - это подход, чтобы избежать ада XSLT с правилом на основе Python.