libxml2 has a number of advantages:
- Compliance to the spec
- Active development and a community participation
- Speed. This is really a python wrapper around a C implementation.
- Ubiquity. The libxml2 library is pervasive and thus well tested.
Dezavantajele includ:
- Respectarea spec . Este strict. Lucrurile ca manipularea spațiului de nume implicit sunt mai ușor în alte biblioteci.
- Utilizarea codului nativ. Aceasta poate fi o durere în funcție de modul în care aplicația dvs. este distribuită/implementată. Sunt disponibile RPM care ușurează o parte din această durere.
- Manipularea manuală a resurselor. Notați în eșantionul de mai jos apelurile la freeDoc() și xpathFreeContext (). Acesta nu este foarte Pythonic.
Dacă faceți o selecție simplă a traseului, lipiți cu ElementTree (care este inclus în Python 2.5) . Dacă aveți nevoie de respectarea spec. Deplină sau viteza brută și puteți face față distribuirii codului nativ, mergeți cu libxml2.
Exemplu de utilizare libxml2 XPath
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()
Exemplu de ElementTree XPath Use
from elementtree.ElementTree import ElementTree
mydoc = ElementTree(file='tst.xml')
for e in mydoc.findall('/foo/bar'):
print e.get('title').text