OVH Cloud OVH Cloud

Extraire données d'un XML

4 réponses
Avatar
remi
Bonjour,

Je souhaite extraire d'un fichier XML le texte compris entre deux tags.
J'utilise minidom (c'est pour un XML très simple)
Pour l'instant, avec :
for node in dom.getElementsByTagName('titre'):
print node.toxml()
j'obtiens le noeud en entier par exemple : <titre>Mon titre</titre>.
Auriez-vous une idée, un conseil ou une doc ?
Merci.
Rémi.

4 réponses

Avatar
Jerome
remi wrote:
Bonjour,


Bonjour


Je souhaite extraire d'un fichier XML le texte compris entre deux tags.
J'utilise minidom (c'est pour un XML très simple)
Pour l'instant, avec :
for node in dom.getElementsByTagName('titre'):
print node.toxml()
j'obtiens le noeud en entier par exemple : <titre>Mon titre</titre>.


C'est le comportement normal, getElementsByTagName() renvoie un noeud
dom qui est un sous-arbre et toxml() renvoie la chaine xml correspondant
au sous-arbre.

En dom, les noeuds textes sont des noeuds à part entière et il faut donc
explicitement récupérer le bon noeud texte que tu désires, suivant tes
données, avec par exemple :

print node.childNodes[0].nodeValue

Avatar
Rémi
Bonjour,

remi wrote:

for node in dom.getElementsByTagName('titre'):
print node.toxml()
j'obtiens le noeud en entier par exemple : <titre>Mon titre</titre>.


C'est le comportement normal, getElementsByTagName() renvoie un noeud
dom qui est un sous-arbre et toxml() renvoie la chaine xml correspondant
au sous-arbre.

En dom, les noeuds textes sont des noeuds à part entière et il faut donc
explicitement récupérer le bon noeud texte que tu désires, suivant tes
données, avec par exemple :

print node.childNodes[0].nodeValue


Merci, c'est ce qui fonctionne.
Au fur et à mesure que je me documente, il semblerait qu'il soit plus
pertinent d'utiliser l'API SAX de python.
Le but est de convertir un XML en SQL.
Merci.
Rémi.


Avatar
Jerome
Rémi wrote:
Bonjour,


remi wrote:



for node in dom.getElementsByTagName('titre'):
print node.toxml()
j'obtiens le noeud en entier par exemple : <titre>Mon titre</titre>.



C'est le comportement normal, getElementsByTagName() renvoie un noeud
dom qui est un sous-arbre et toxml() renvoie la chaine xml
correspondant au sous-arbre.

En dom, les noeuds textes sont des noeuds à part entière et il faut
donc explicitement récupérer le bon noeud texte que tu désires,
suivant tes données, avec par exemple :

print node.childNodes[0].nodeValue



Merci, c'est ce qui fonctionne.
Au fur et à mesure que je me documente, il semblerait qu'il soit plus
pertinent d'utiliser l'API SAX de python.


Tout dépend du problème. Sax est évenementiel et est très performant
pour une transformation en 1 passage. Mais parfois il est utile de
travailler sur des transformations trop compliquées à faire en sax mais
pas en dom.

Le but est de convertir un XML en SQL.


Alors je pense que Sax est plus adapté aussi.

Merci.
Rémi.




Avatar
remi
Bonjour,


Tout dépend du problème. Sax est évenementiel et est très performant
pour une transformation en 1 passage.


C'est ça. Bon, j'ai eu du mal à voir le fonctionnement de DOM avec
Python, je vais me coller à SAX. Toutes suggestions sont les bienvenues! ;-)
Merci.
Rémi.