Какая библиотека XML, для какой цели?

Поиск "Python" и "xml" возвращает множество библиотек для объединения двух.

Этот список, вероятно, дефектный:

  • xml.dom
  • xml.etree
  • xml.sax
  • xml.parsers.expat
  • PyXML
  • beautifulsoup?
  • HTMLParser
  • htmllib
  • sgmllib

Будьте хороши, если кто-то может предложить быструю сводку того, когда использовать который, и почему.

8
задан John Mee 12 March 2010 в 04:02
поделиться

4 ответа

Разделение DOM / SAX является основным. Оно применяется не только к Python, поскольку DOM и SAX являются кросс-языковыми.

DOM : считывать весь документ в память и манипулировать им. Подходит для:

  • сложных взаимосвязей между тегами в разметке
  • небольших замысловатых XML-документов
  • Предупреждений:
    • Простота использования избыточной памяти

SAX : анализируйте документ, пока вы его читаете. Подходит для:

  • длинных документов или открытых потоков
  • мест, где память является ограничением.
  • Предостережения:
    • Вам потребуется кодировать синтаксический анализатор с отслеживанием состояния,что может быть сложно

beautifulsoup :

Отлично подходит для HTML или не совсем правильно сформированной разметки. Легко использовать и быстро. Подходит для очистки экрана и т. Д. Он может работать с разметкой, тогда как XML-файлы просто из-за ошибки сообщают, что разметка неверна.

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

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

6
ответ дан 5 December 2019 в 14:02
поделиться

Многие проблемы можно решить с помощью xml . Его главное преимущество состоит в том, что он входит в стандартную библиотеку. Это означает, что он предустановлен почти в каждой системе и интерфейс будет статическим. Он не самый лучший и не самый быстрый, но он есть.

Для всего остального есть lxml. В частности, lxml лучше всего подходит для анализа поврежденных HTML, xHTML или подозрительных каналов. Он использует libxml2 и libxslt для обработки XPath, XSLT и EXSLT. Учебник ясен, а интерфейс упрощен. Остальные упомянутые библиотеки существуют, потому что lxml не был доступен в его текущей форме.

Это мое мнение.

1
ответ дан 5 December 2019 в 14:02
поделиться

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

1
ответ дан 5 December 2019 в 14:02
поделиться

Я нахожу xml. etree по существу достаточным для всего, кроме BeautifulSoup, если мне когда-нибудь понадобится разобрать битый XML (не очень распространенная проблема, в отличие от битого HTML, с которым BeautifulSoup также помогает и есть везде): он имеет разумную поддержку для чтения целых XML-документов в памяти, навигации по ним, создания их, инкрементального разбора больших документов. lxml поддерживает тот же интерфейс и в целом быстрее - полезно для повышения производительности, когда вы можете позволить себе установить сторонние расширения Python (например, на App Engine вы не можете - но xml.etree все еще там, так что вы можете запустить точно такой же код). lxml также имеет больше возможностей и предлагает BeautifulSoup.

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

4
ответ дан 5 December 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: