> Modules non standards > Autres modules non standards > lxml
lxml
C'est une librarie de parsing xml qui s'appuie sur la librairie C et qui est très rapide.
En général, on fait : from lxml import etree
Parsing d'un document :
- elt = etree.fromstring("<rootElt>some text</rootElt>") : à partir d'une string (retourne un objet de type lxml.etree._Element)
- elt = etree.XML("<rootElt>some text</rootElt>") : on peut faire ça aussi.
- tree = etree.parse("myFile.xml") : renvoie un object de type lxml.etree._ElementTree.
- on peut faire aussi tree = etree.parse(fh) avec un filehandle (où n'import quel objet à partir duquel on peut lire)..
- on peut aussi faire from io import BytesIO; tree = etree.parse(BytesIO(b"<rootElt>some text</rootElt>"))
- on peut aussi parser le document au fur et à mesure, éĺément par élément, utile pour des gros fichiers :
for event, elt in etree.iterparse("myFile.xml", events = ('start', 'end')):
print(event, elt.tag)
par défaut, events vaut ('end'), seul les événements provoqués par un tag de fin sont récupérés, qui est le seul moment où la totalité de l'élément a été parsée.
- on peut aussi faire du parsing de type SAX.
namespaces :
- en interne, lxml stocke les éléments avec leur namespace complet ({http://...}).
- pour enlever le namespace, on peut faire etree.QName(elt).localname
- si on veut rajouter le prefix correspondant au namespace (si celui-ci existe) : elt.prefix + ':' + etree.QName(elt).localname
Méthodes usuelles :
- root = tree.getroot() : une fois qu'on a l'arbre, on peut avoir l'élément racine.
- elt.tag : le tag de l'élément.
- elt.text le texte contenu dans l'élément.
- elt.attrib : dictionnaire des attributs de l'élément.
- for subelt in elt: : boucle directement sur les fils de l'élément.
- list(elt) : la liste des fils de l'élément.
- len(elt) : le nombre de fils de l'élément.
- elt.findall('myTag') : tous les fils <myTag> de l'élément.
- elt.find('myTag') : le premier fils <myTag> de l'élément (renvoie None si non trouvé)
- elt.get_element_by_id('myId') : récupère l'élément dont l'id est donné.
- elt.getparent() : le parent de l'élément.
- elt.xpath(xpathExpression) : renvoie les éléments correspondant à l'expression xpath
- elt.iter('myTag') : renvoie un itérateur sur tous les sous éléments <myTag> directs ou indirects.
- elt.text_content() : renvoie le contenu en texte (sans les tags xml) de l'élément.
Copyright python-simple.com

programmer en python, tutoriel python, graphes en python, Aymeric Duclert