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

Анализ XML: Дерево элементов (etree) против минидома

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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