Каков современный способ сделать преобразования XML в Python?
Мне нужно сделать двунаправленные преобразования между некоторыми значительно сложными форматами XML и плоского файла в Python. Я устарел и не знаю, как люди решают эту проблему в далеком будущем 2011 году.
Я обновился с помощью различных библиотек XML Python, но прошло 8 лет с момента моего последнего прихода в XSLT, и я был поражен тем, что по-прежнему встречался с тем, что все еще распространено.
Итак, как вы собираетесь делать сложные преобразования XML-данных?
Я хотел бы сделать это в Python, потому что документы не являются прямыми сопоставлениями, и требуется некоторая обработка и расчет. Но я все равно хотел бы как можно больше перейти к движку правил.
Изменить. Чтобы быть ясным, меня интересуют методы больше, чем конкретные библиотеки или инструменты, но, пожалуйста, опубликуйте их тоже. Я стараюсь избежать шаблона слов здесь, но, безусловно, это обычная проблема.
Изменить 2. Я до сих пор не думаю, что были какие-то хорошие ответы на общие методы, но исходная проблема была решена с использованием рамки Bots EDI для выполнения переводов документов. Он довольно сильно сосредоточен на EDI, но может использоваться для общего перевода. Это было тяжелое решение, хотя.
Ответы
Ответ 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.