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 :
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>
Je n'ai pas pris la peine d'ajouter le reste car il m'est facile d'y récupérer les informations.

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 :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
print $noeuds->find_by_tag_name("TEXTE")->as_text;
Il m'affiche tout le texte même ceux dans les sous balises.

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.