libxml2 имеет ряд преимуществ:
- Соответствие спецификации
- Активное развитие и участие сообщества
- Скорость. Это действительно оболочка Python для реализации на Си.
- Ubiquity. Библиотека libxml2 широко распространена и поэтому хорошо протестирована.
Недостатки включают в себя:
- Соответствие спецификации . Это строгое Такие вещи, как обработка пространства имен по умолчанию, проще в других библиотеках.
- Использование нативного кода. Это может быть проблемой в зависимости от того, как ваше приложение распределено / развернуто. Доступны RPM, которые облегчают эту боль.
- Ручная обработка ресурсов. Обратите внимание на приведенный ниже пример вызовов freeDoc () и xpathFreeContext (). Это не очень Pythonic.
Если вы делаете простой выбор пути, придерживайтесь ElementTree (который включен в Python 2.5). Если вам нужно полное соответствие спецификациям или грубая скорость и вы можете справиться с распространением нативного кода, используйте libxml2.
Пример использования XPath libxml2
import libxml2
doc = libxml2.parseFile("tst.xml")
ctxt = doc.xpathNewContext()
res = ctxt.xpathEval("//*")
if len(res) != 2:
print "xpath query: wrong node set size"
sys.exit(1)
if res[0].name != "doc" or res[1].name != "foo":
print "xpath query: wrong node set value"
sys.exit(1)
doc.freeDoc()
ctxt.xpathFreeContext()
Пример использования ElementTree XPath
from elementtree.ElementTree import ElementTree
mydoc = ElementTree(file='tst.xml')
for e in mydoc.findall('/foo/bar'):
print e.get('title').text