2011-11-05 4 views
26

Я использую minidom для синтаксического анализа XML в течение многих лет. Теперь я узнал об Element Tree. Мой вопрос, который лучше для синтаксического анализа? То есть:XML Parsing: Element Tree (etree) vs minidom

  • Который быстрее?
  • Который использует меньше памяти?
  • Есть ли у меня какие-либо зависимости O (n^2), о которых я должен беспокоиться?
  • Есть ли амортизация в пользу другого?

Почему у нас есть два интерфейса?

Спасибо.

ответ

14

Python имеет два интерфейса, вероятно, потому, что Element Tree была интегрирована в стандартную библиотеку после нескольких минут. Причиной этого, вероятно, был его гораздо более «Pythonic» API по сравнению с DOM с контролем W3C.

Если вы обеспокоены скоростью, есть также lxml, который строит совместимую с ElementTree DOM с помощью libxml2 и должен быть довольно быстрым - у них есть набор тестов, сравнивающий себя с доступными реализациями Python и C ElementTree.

Если вы обеспокоены использованием памяти, вы не должны использовать API дерева в любом случае; PullDOM может быть лучшим выбором, но я экстраполирую опыт, используя превосходный синтаксический анализатор Java - на PullDOM, похоже, не так много информации.

17

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

Пакет ElementTree был предназначен для обеспечения более Pythonic-интерфейса. Все дело в том, чтобы сделать программиста проще.

В зависимости от вашей сборки каждый из них имеет базовую реализацию C, которая заставляет их работать быстро.

Ни один из вышеперечисленных инструментов не устарел. Каждый из них имеет свои достоинства (например, Sax не нужно читать весь ввод в память).

Существует также сторонний модуль под названием lxml, который также является популярным выбором (полнофункциональный и быстрый).

+3

И если у вас есть проблемы с производительностью с элементом, есть lxml, который обеспечивает совместимый интерфейс, но использует застывшую, сильно настроенную библиотеку C за кулисами. – delnan

 Смежные вопросы

  • Нет связанных вопросов^_^