Bonjour à tous et merci d'avance à ceux qui pourront m'aider.
Je dois traiter des fichiers xml en récupérant les informations contenus dedans.
J'arrive à récupérer quasiment toutes les informations contenu dans les balises toutefois, d'un XML à un autre, une balise précises, peut contenir une sous balise et c'est là que je bloque.
Voici le XML :
Je n'ai pas pris la peine d'ajouter le reste car il m'est facile d'y récupérer les informations.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <BODY> <SECTION> <IT1><B>blablabla...</B></IT1> <PAR>blablabla...<BR/></PAR> <PAR>blablabla...<BR/></PAR> </SECTION> <SECTION> <IT1><B>blablabla</B></IT1> <PAR>blablabla...(<I>lire en page 3).</I><BR/></PAR> </SECTION> <ENCADRE> <ETX><B><I>blablabla</I></B></ETX> <ETX><B><I>blablabla</I></B></ETX> </ENCADRE> </TEXTE> </BODY> <PDF id="20130809_REN_002" nature="page"/> </DOC-PRESSED>
Comme vous pouvez le voir dans l'exemple, il peut parfois apparaître dans la balise <TEXTE>==><PAR> comme parfois dans la balise <SECTION>==><PAR> des sous balises <IT1> ou <I> etc...
Voici la commande que je tape pour récupérer toutes les balises <PAR> contenu dans <TEXTE>
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
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 from xml.dom import minidom def getText(nodelist): rc = [] for node in nodelist: if node.nodeType == node.TEXT_NODE: rc.append(node.data) return ''.join(rc) try : dom = minidom.parse(ficXML) root = dom.documentElement except : print "erreur" break if (root.getElementsByTagName("TEXTE")): texte = root.getElementsByTagName("TEXTE")[0] par = texte.getElementsByTagName("PAR") i=0 for i, tmp in enumerate(par): if (texte.getElementsByTagName("PAR")[i]): words = getText(texte.getElementsByTagName("PAR")[i].childNodes).strip().encode("utf-8") print words i+=1 else: continue
Ce script m'affiche les textes sans le texte contenu dans <I>.
En Perl, il m'est facile d'afficher tout le contenu de la balise <TEXTE> avec les lignes suivantes :
Il m'affiche tout le texte même ceux dans les sous balises.
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 print $noeuds->find_by_tag_name("TEXTE")->as_text;
Malheureusement, avec Python, je ne trouve pas le moyen d'afficher le texte mise à part me déplacer dans les sous balises etc...
Est-ce possible de supprimer ces balises pour que son contenu fasse partie de la balise Parents <PAR>?
Est-ce possible de savoir si une balise possède une balise enfant (car il n'y est pas systématiquement).
Je ne suis pas obligé d'utiliser xml.dom.
Merci d'avance pour votre aide.
Cordialement.
Partager