J'ai pris le parti d'utiliser la bibliothèque standard de manipulation XML lxml pour me faciliter la tâche. Cette librairie s'installe directement avec la commande pip install lxml depuis toute station Unix ou Windows connectée à internet (nano PC de type raspberry compris).
Voici le fichier XML que je vais parser :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <?xml version="1.0" encoding="UTF-8"?> <clients> <client> <nom> Ponsable </nom> <prenom> Thérèse </prenom> <email> "therese.ponsable@dumatos.org" </email> <tel> "01020304" </tel> </client> <client> <nom> Rambo </nom> <prenom> John </prenom> <email> "rambo@biscotos.org" </email> <tel> "12356498" </tel> </client> <client> <nom> Rocky </nom> <prenom> Balboa </prenom> <email> "Rocky@baston.org" </email> <tel> "12356498" </tel> </client> <client> <nom> Starsky </nom> <prenom> David </prenom> <email> "david.starsky@guignols.org" </email> <tel> "12356498" </tel> </client> </clients> |
L'objectif de mon chargeur est de créer une liste d'objets Client depuis cette source XML.
Voici le code source de ma classe Client :
Code python : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | class Client : rang = 0 def __init__(self, nom, prenom, email, tel): Client.rang += 1 self.ident = Client.rang self.nom = nom self.prenom = prenom self.email = email self.tel = tel def afficher(self): print(str(self.ident) + " " + self.nom + " " + self.prenom + " " + self.email + " " + self.tel) |
Voici enfin le code source de mon composant :
Code python : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Carnet : def __init__(self): self.clients = list() def ajouter(self, client): self.clients.append(client) def afficher(self): for client in self.clients: client.afficher() def charger(self, nomFichier): tree = etree.parse(nomFichier) for client in tree.xpath("/clients/client"): self.ajouter(Client(client.find("nom").text, client.find("prenom").text, client.find("email").text, client.find("tel").text)) |
Pour le test, il suffit de charger le fichier et de l'afficher de cette façon :
Code python : | Sélectionner tout |
1 2 3 | carnet = Carnet() carnet.charger("clients.xml") carnet.afficher() |