Mis a jour le 2017-12-03, 22:17

Parsing DOM avec ElementTree

Utilisation : from xml.etree import ElementTree
tree = ElementTree.parse(myFile) : renvoie un objet de type ElementTree
tree = ElementTree.fromstring('<myRoot> ...</myRoot>') : renvoie un objet de type Element qui est la racine du DOM
root = myTree.getroot() : renvoie la racine d'un objet de type ElementTree qui est de type Element
Propriétés d'un Element :
Iteration sur tous les sous éléments d'un élément donné :
for child in myElement:
    print(child.tag, child.attrib)
  
Itération sur tous les éléments qui ont un tag donné, même si ce ne sont pas des enfants directs :
for elt in myElement.iter('myTag'):
    print(elt.tag, elt.attrib)
  
myElement.iter('myTag') : renvoie un itérateur (même si myTag n'est pas trouvé du tout)
elt.findall('myTag') : renvoie la liste des éléments myTag qui sont directement en-dessous de l'élément elt
elt.find('myTag') : renvoie le premier élément myTag qui est directement en-dessous de l'élément elt (ou None s'il n'existe pas)
Pour trouver un tag ayant un certain namespace : elt.find('{http://myUrlNameSpace}name') ou mieux : elt.find('myNameSpace:name', ns) où ns est le dictionnaire {'myNameSpace': 'http://myUrlNameSpace'}.
Avec iter, on ne peut pas donner le dictionnaire, il faut utiliser l'url : elt.iter('{' + ns['myNameSpace'] + '}:name')

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert