Обработка XML в Python

голоса
61

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

К сожалению, в то время как я знаю, что модель XML достаточно хорошо в .NET, я не зная, что плюсы и минусы моделей XML в Python.

Кто-нибудь есть опыт делает обработки XML в Python? Где бы вы посоветовали мне начать? XML-файлы, я буду здание будет довольно просто.

Задан 02/08/2008 в 04:35
источник пользователем
На других языках...                            


16 ответов

голоса
30

ElementTree имеет приятный pythony API. Я думаю , что даже поставляется как часть Python 2.5

Это в чистом питоне , и как я говорю, очень хорошо, но если вы завершаете требуется больше производительности, то LXML предоставляет тот же интерфейс и использует libxml2 под капотом. Вы можете теоретически просто поменять его , когда вы обнаружите , что вам нужно это.

Ответил 02/08/2008 в 16:21
источник пользователем

голоса
22

Лично я играл с несколькими встроенными опционами на проект XML-тяжелого и осел на pulldom как лучший выбор для менее сложных документов.

Особенно для небольших простых вещей, мне нравится управляемые события теории разбора , а не создание Уймы обратных вызовов для относительно простой конструкции. Вот хорошая быстрая дискуссия о том , как использовать API .

Что мне нравится: Вы можете обрабатывать синтаксические в forцикле , а не с помощью функции обратного вызова. Вы также задержать полный синтаксический (далее «тянуть» часть) и получить только дополнительные детали , когда вы звоните expandNode(). Это удовлетворяет мое общее требование к «ответственной» эффективности без ущерба для простоты использования и простоты.

Ответил 02/08/2008 в 05:01
источник пользователем

голоса
6

Погружение в Python есть глава. Не могу ручаться за то, как хорошо было бы , хотя.

Ответил 02/08/2008 в 04:43
источник пользователем

голоса
5

Это зависит немного о том, как сложный документ должен быть.

Я использовал minidom много для написания XML, но это, как правило, было просто чтение документов, делая некоторые простые преобразования, и записывая их обратно. Это работало достаточно хорошо, пока я не нужна возможность заказать атрибуты элементов (для удовлетворения древнего приложения, которое не разбор XML правильно). В этот момент я сдался и написал XML себя.

Если вы работаете только на простых документов, то делать это самостоятельно может быть быстрее и проще , чем изучать основы. Если вы можете предположительно записать XML вручную, то вы , вероятно , можете кодировать его вручную , а также (только не забудьте правильно экранировать специальные символы, и использовать str.encode(codec, errors="xmlcharrefreplace")). Помимо этих непредвиденного, XML достаточно , чтобы вы не регулярно нуждаются в специальную библиотеку , чтобы написать ее. Если документ является слишком сложным , чтобы написать вручную, то вы , вероятно , следует искать в одну из рамок уже упомянутых. Ни в какой -то момент вы должны должны написать общий XML писатель.

Ответил 14/10/2008 в 19:26
источник пользователем

голоса
5

Я использовал ElementTree для нескольких проектов и рекомендовать его.

Это вещее, приходит «в поле» с Python 2.5, в том числе с версией cElementTree (xml.etree.cElementTree), который в 20 раз быстрее, чем чистые версии Python, и очень просты в использовании.

LXML имеет некоторые преимущества сисем, но они неравны, и вы должны проверить критерии первыми для использования.

Как я понимаю, ElementTree код может быть легко перенесен на LXML.

Ответил 23/09/2008 в 20:42
источник пользователем

голоса
5

Есть 3 основных способов борьбы с XML, в целом: дом, саксофон, и XPath. Модель дома хорошо, если вы можете себе позволить, чтобы загрузить весь файл XML в память сразу, и вы не возражаете дело со структурами данных, и вы смотрите на много / большую часть модели. Модель саксофона является большим, если вы заботитесь только о нескольких тегов, и / или вы имеете дело с большими файлами и может обрабатывать их последовательно. Модель XPath немного каждого - вы можете выбрать пути к элементам данных, вам нужно, но это требует больше библиотек для использования.

Если вы хотите простой и в комплекте с Python, minidom ваш ответ, но это довольно хромой, и документация «вот документы на йот, идут понять это». Это действительно раздражает.

Лично мне нравится cElementTree, который является более быстрым (с основой) осуществлением ElementTree, который является домом, как моделью.

Я использовал системы саксофона, и во многих отношениях они более «вещие» в их чувствуют, но я обычно в конечном итоге создание государственных систем на базе, чтобы справиться с ними, и что путь лежит безумие (и ошибки).

Я говорю идти с minidom, если вы любите исследования, или ElementTree если вы хотите хороший код, который хорошо работает.

Ответил 16/09/2008 в 05:35
источник пользователем

голоса
4

Вы также можете попытаться распутать для разбора простых XML - документов.

Ответил 31/10/2011 в 15:05
источник пользователем

голоса
4

Я пишу сервер SOAP, который получает запросы XML, и создает ответы XML. (К сожалению, это не мой проект, поэтому закрытый исходный код, но это уже другая проблема).

Оказалось, что для меня создание (SOAP) документов XML является довольно простым, если у вас есть структура данных, которая «вписывается» в схему.

Я держу конверт, так как конверт ответ (почти) такой же, как запрос конверт. Тогда, так как моя структура данных (возможно, вложенный) словарь, я создаю строку, которая превращает этот словарь в <ключ> значение </ ключ> элементы.

Это задача, которая рекурсии делает простой, и я в конечном итоге с правильной структурой. Все это делается в питона коде, и в настоящее время достаточно быстро для использования в производстве.

Вы можете также (относительно) легко создавать списки, а также, хотя и в зависимости от вашего клиента, вы можете ударить проблемы, если не дать длины подсказки.

Для меня это было гораздо проще, так как словарь является гораздо более простой способ работы, чем некоторые пользовательского класса. Для книг, генерации XML гораздо проще, чем разбор!

Ответил 03/08/2008 в 09:34
источник пользователем

голоса
3

Для серьезной работы с XML в Python использование LXML

Python поставляется с ElementTree построен в библиотеке, но LXML расширяет его с точкой зрения скорости и функциональности (проверок схемы, саксофон разбора, XPath, различного рода итераторы и многих других функций).

Вы должны установить его, но во многих местах уже считаются частью стандартного оборудования (например, Google AppEngine не допускают пакеты Python C на основе, но делают исключение для LXML, PyYAML и некоторых других).

Создание XML-документов с помощью E-фабрики (от LXML)

Ваш вопрос о создании XML-документа.

С LXML Есть много методов и мне потребовалось некоторое время, чтобы найти тот, который, кажется, простой в использовании, а также легко читать.

Пример кода из LXML документ об использовании E-завод (немного упрощенно):


E-завод обеспечивает простой и компактный синтаксис для создания XML и HTML:

>>> from lxml.builder import E

>>> html = page = (
...   E.html(       # create an Element called "html"
...     E.head(
...       E.title("This is a sample document")
...     ),
...     E.body(
...       E.h1("Hello!"),
...       E.p("This is a paragraph with ", E.b("bold"), " text in it!"),
...       E.p("This is another paragraph, with a", "\n      ",
...         E.a("link", href="http://www.python.org"), "."),
...       E.p("Here are some reserved characters: <spam&egg>."),
...     )
...   )
... )

>>> print(etree.tostring(page, pretty_print=True))
<html>
  <head>
    <title>This is a sample document</title>
  </head>
  <body>
    <h1>Hello!</h1>
    <p>This is a paragraph with <b>bold</b> text in it!</p>
    <p>This is another paragraph, with a
      <a href="http://www.python.org">link</a>.</p>
    <p>Here are some reserved characters: &lt;spam&amp;egg&gt;.</p>
  </body>
</html>

Ценю на E-заводе это следующие вещи

Код читает почти как результирующий документ XML

Readibility рассчитывает.

Позволяет создавать любой контент XML

Поддерживает такие вещи, как:

  • Использование пространств имен
  • начальный и конечный узлы текста в пределах одного элемента
  • Функции форматирования содержимого атрибутов (см Func класс в полной выборке LXML )

Позволяет очень читаемых конструкции со списками

например:

from lxml import etree
from lxml.builder import E
lst = ["alfa", "beta", "gama"]
xml = E.root(*[E.record(itm) for itm in lst])
etree.tostring(xml, pretty_print=True)

в результате чего:

<root>
  <record>alfa</record>
  <record>beta</record>
  <record>gama</record>
</root>

Выводы

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

Единственный недостаток LXML в том, что он должен быть собран. См SO ответ больше советов , как установить LXML из пакета формата колеса в доли секунды.

Ответил 17/04/2014 в 22:32
источник пользователем

голоса
3

Я лично считаю , что глава из Погружения в Python велик. Убедитесь , что в первую очередь - он использует модуль minidom и является довольно хорошим куском письменной формы.

Ответил 11/08/2008 в 19:02
источник пользователем

голоса
3

Так как вы сказали , что вы будете строить «довольно простой» XML, тем модуль minidom (часть стандартной библиотеки Python), скорее всего , удовлетворить ваши потребности. Если у Вас есть опыт работы с DOM представления XML, вы должны найти API довольно прямо вперед.

Ответил 02/08/2008 в 19:04
источник пользователем

голоса
1

Я думаю, вы должны использовать LXML для этого функциональности,

Ответил 08/10/2014 в 06:58
источник пользователем

голоса
1

Я настоятельно рекомендую SAX - Простой API для XML - внедрение в библиотеках Python. Они довольно легко установить и обрабатывать большие XML с помощью даже ведомого API, как описаны в предыдущих плакатах здесь, и имеют низкий объем памяти, в отличие от проверки DOM стилей XML парсеров.

Ответил 12/12/2012 в 04:25
источник пользователем

голоса
1

Если вы собираетесь строить SOAP сообщения, проверить soaplib . Он использует ElementTree под капотом, но он обеспечивает гораздо более понятный интерфейс для сериализации и десериализации сообщения.

Ответил 13/10/2008 в 23:17
источник пользователем

голоса
1

Я полагаю, что .Net-способ обработки XML основывается на'som версии MSXML и тот случай, я полагаю, что, используя, например, minidom бы заставить вас чувствовать себя немного дома. Однако, если это просто обработка вы делаете любую библиотеку, вероятно, сделать.

Я тоже предпочитаю работать с ElementTree при работе с XML в Python, это очень аккуратная библиотека.

Ответил 16/09/2008 в 07:20
источник пользователем

голоса
1

Я недавно начал использовать Amara с успехом.

Ответил 11/08/2008 в 23:40
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more