Python Language
Manipulation de XML
Recherche…
Remarques
Tous les éléments de l'entrée XML ne seront pas considérés comme des éléments de l'arborescence analysée. Actuellement, ce module ignore les commentaires XML, les instructions de traitement et les déclarations de type de document dans l'entrée. Néanmoins, les arborescences créées à l'aide de l'API de ce module plutôt que l'analyse à partir de texte XML peuvent contenir des commentaires et des instructions de traitement. ils seront inclus lors de la génération de sortie XML.
Ouvrir et lire en utilisant un ElementTree
Importez l'objet ElementTree, ouvrez le fichier .xml approprié et obtenez la balise racine:
import xml.etree.ElementTree as ET
tree = ET.parse("yourXMLfile.xml")
root = tree.getroot()
Il y a plusieurs façons de chercher dans l'arborescence. Le premier est par itération:
for child in root:
print(child.tag, child.attrib)
Sinon, vous pouvez référencer des emplacements spécifiques comme une liste:
print(root[0][1].text)
Pour rechercher des balises spécifiques par nom, utilisez le .find
ou .findall
:
print(root.findall("myTag"))
print(root[0].find("myOtherTag"))
Modification d'un fichier XML
Importer le module Element Tree et ouvrir le fichier xml, obtenir un élément xml
import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root=tree.getroot()
element = root[0] #get first child of root element
L'objet Element peut être manipulé en modifiant ses champs, en ajoutant et en modifiant des attributs, en ajoutant et en supprimant des enfants
element.set('attribute_name', 'attribute_value') #set the attribute to xml element
element.text="string_text"
Si vous voulez supprimer un élément, utilisez la méthode Element.remove ()
root.remove(element)
ElementTree.write () méthode utilisée pour générer un objet xml dans des fichiers xml.
tree.write('output.xml')
Créer et créer des documents XML
Module d'importation d'éléments
import xml.etree.ElementTree as ET
La fonction Element () permet de créer des éléments XML
p=ET.Element('parent')
Fonction SubElement () utilisée pour créer des sous-éléments à un élément donner
c = ET.SubElement(p, 'child1')
La fonction dump () permet de vider des éléments XML.
ET.dump(p)
# Output will be like this
#<parent><child1 /></parent>
Si vous souhaitez enregistrer dans un fichier, créez un arbre xml avec la fonction ElementTree () et enregistrez-le dans un fichier en utilisant la méthode write ()
tree = ET.ElementTree(p)
tree.write("output.xml")
La fonction Comment () est utilisée pour insérer des commentaires dans un fichier xml.
comment = ET.Comment('user comment')
p.append(comment) #this comment will be appended to parent element
Ouverture et lecture de fichiers XML volumineux à l'aide d'iterparse (analyse incrémentielle)
Parfois, nous ne voulons pas charger l'intégralité du fichier XML pour obtenir les informations dont nous avons besoin. Dans ces cas, il est utile de pouvoir charger progressivement les sections pertinentes et de les supprimer lorsque nous avons terminé. Avec la fonction iterparse, vous pouvez éditer l'arborescence d'éléments stockée lors de l'analyse du XML.
Importez l'objet ElementTree:
import xml.etree.ElementTree as ET
Ouvrez le fichier .xml et parcourez tous les éléments:
for event, elem in ET.iterparse("yourXMLfile.xml"):
... do something ...
Alternativement, nous ne pouvons rechercher que des événements spécifiques, tels que les balises de début / fin ou les espaces de noms. Si cette option est omise (comme ci-dessus), seuls les événements "fin" sont renvoyés:
events=("start", "end", "start-ns", "end-ns")
for event, elem in ET.iterparse("yourXMLfile.xml", events=events):
... do something ...
Voici l'exemple complet montrant comment effacer des éléments de l'arborescence en mémoire lorsque nous en avons fini avec:
for event, elem in ET.iterparse("yourXMLfile.xml", events=("start","end")):
if elem.tag == "record_tag" and event == "end":
print elem.text
elem.clear()
... do something else ...
Recherche du XML avec XPath
À partir de la version 2.7, ElementTree
prend mieux en charge les requêtes XPath. XPath est une syntaxe permettant de naviguer dans un fichier XML, car SQL est utilisé pour rechercher dans une base de données. Les deux fonctions find
et findall
prennent en charge XPath. Le xml ci-dessous sera utilisé pour cet exemple
<Catalog>
<Books>
<Book id="1" price="7.95">
<Title>Do Androids Dream of Electric Sheep?</Title>
<Author>Philip K. Dick</Author>
</Book>
<Book id="5" price="5.95">
<Title>The Colour of Magic</Title>
<Author>Terry Pratchett</Author>
</Book>
<Book id="7" price="6.95">
<Title>The Eye of The World</Title>
<Author>Robert Jordan</Author>
</Book>
</Books>
</Catalog>
Recherche de tous les livres:
import xml.etree.cElementTree as ET
tree = ET.parse('sample.xml')
tree.findall('Books/Book')
Recherche du livre intitulé "The Color of Magic":
tree.find("Books/Book[Title='The Colour of Magic']")
# always use '' in the right side of the comparison
Recherche du livre avec id = 5:
tree.find("Books/Book[@id='5']")
# searches with xml attributes must have '@' before the name
Rechercher le deuxième livre:
tree.find("Books/Book[2]")
# indexes starts at 1, not 0
Recherchez le dernier livre:
tree.find("Books/Book[last()]")
# 'last' is the only xpath function allowed in ElementTree
Rechercher tous les auteurs:
tree.findall(".//Author")
#searches with // must use a relative path