Поиск "Python" и "xml" возвращает множество библиотек для объединения двух.
Этот список, вероятно, дефектный:
Будьте хороши, если кто-то может предложить быструю сводку того, когда использовать который, и почему.
Разделение DOM / SAX является основным. Оно применяется не только к Python, поскольку DOM и SAX являются кросс-языковыми.
DOM : считывать весь документ в память и манипулировать им. Подходит для:
SAX : анализируйте документ, пока вы его читаете. Подходит для:
beautifulsoup :
Отлично подходит для HTML или не совсем правильно сформированной разметки. Легко использовать и быстро. Подходит для очистки экрана и т. Д. Он может работать с разметкой, тогда как XML-файлы просто из-за ошибки сообщают, что разметка неверна.
Большую часть остальных я не использовал, но я не думаю, что есть жесткие правила о том, когда что использовать. Просто ваши стандартные соображения: кто будет поддерживать код, какие API-интерфейсы вы считаете наиболее простыми в использовании, насколько хорошо они работают и т. Д.
В общем, для базовых нужд хорошо использовать стандартные библиотечные модули, поскольку они являются «стандартными», а потому доступны и хорошо известны. Однако, если вам нужно в чем-то покопаться, почти всегда есть новые нестандартные модули с превосходной функциональностью за пределами стандартной библиотеки.
Многие проблемы можно решить с помощью xml . Его главное преимущество состоит в том, что он входит в стандартную библиотеку. Это означает, что он предустановлен почти в каждой системе и интерфейс будет статическим. Он не самый лучший и не самый быстрый, но он есть.
Для всего остального есть lxml. В частности, lxml лучше всего подходит для анализа поврежденных HTML, xHTML или подозрительных каналов. Он использует libxml2 и libxslt для обработки XPath, XSLT и EXSLT. Учебник ясен, а интерфейс упрощен. Остальные упомянутые библиотеки существуют, потому что lxml не был доступен в его текущей форме.
Это мое мнение.
Я не особо много работаю с XML, но когда мне нужно было, работать с lxml было очень приятно, и он, по всей видимости, работает довольно быстро. API дерева элементов очень удобен в объектно-ориентированной настройке.
Я нахожу xml. etree
по существу достаточным для всего, кроме BeautifulSoup
, если мне когда-нибудь понадобится разобрать битый XML (не очень распространенная проблема, в отличие от битого HTML, с которым BeautifulSoup также помогает и есть везде): он имеет разумную поддержку для чтения целых XML-документов в памяти, навигации по ним, создания их, инкрементального разбора больших документов. lxml
поддерживает тот же интерфейс и в целом быстрее - полезно для повышения производительности, когда вы можете позволить себе установить сторонние расширения Python (например, на App Engine вы не можете - но xml.etree все еще там, так что вы можете запустить точно такой же код). lxml
также имеет больше возможностей и предлагает BeautifulSoup.
Другие упомянутые вами библиотеки имитируют API, разработанные для совсем других языков, и в целом я не вижу причин втягивать Python в эти извилины. Если у вас есть очень специфические потребности, такие как поддержка xslt, различных видов валидации и т.д., возможно, стоит поискать другие библиотеки, но у меня давно не было таких потребностей, поэтому я не в курсе их предложений.