OVH Cloud OVH Cloud

Minidom récupérer valeur dans balise

2 réponses
Avatar
Pierrot
Bonjour,
J'ai une question toute bête sur l'utilisation de l'API minidom de python.
J'arrive très bien à récupérer l'attribut d'une balise mais ça se gâte
lorsque je cherche à récupérer la valeur d'une balise.
Existe-t-il une méthode simple ? Merci par avance.

Mon fichier:
<data>
<item code = '123'>
<price>123</price>
</item>
<item code = '456'>
<price>456</price>
</item>
</data>

Mon code:
from xml.dom import minidom

docXML = minidom.parse('monfichier.xml')
for node in docXML.getElementsByTagName('item'):
# Je récupère bien la valeur de l'attribut
if node.getAttribute('code') == '456':
print "OK"
print node.getElementsByTagName('price')

2 réponses

Avatar
Jerome
Pierrot wrote:
Bonjour,
J'ai une question toute bête sur l'utilisation de l'API minidom de python.
J'arrive très bien à récupérer l'attribut d'une balise mais ça se gâte
lorsque je cherche à récupérer la valeur d'une balise.
Existe-t-il une méthode simple ? Merci par avance.

Mon fichier:
<data>
<item code = '123'>
<price>123</price>
</item>
<item code = '456'>
<price>456</price>
</item>
</data>

Mon code:
from xml.dom import minidom

docXML = minidom.parse('monfichier.xml')
for node in docXML.getElementsByTagName('item'):
# Je récupère bien la valeur de l'attribut
if node.getAttribute('code') == '456':
print "OK"
print node.getElementsByTagName('price')


Bonjour,

dans ton code, quand tu écris node.getElementsByTagName('price'), tu
récupères tous les fils qui ont pour nom 'price' dans une liste. Dans
ton cas la liste à un seul élément.

Tu peux faire n_price = node.getElementsByTagName('price')[0] pour avoir
l'élément en dom du noeud 'price'.

Si tu veux la "valeur", il faut récupérer le fils de ce noeud qui est un
noeud texte et récupérer le contenu de ce noeud texte. Dans ton cas :
n_price.firstChild.data


En plus simple je te conseille une autre librairie genre libxml2...


Jerome

Avatar
Pierrot
Pierrot wrote:
Bonjour,
J'ai une question toute bête sur l'utilisation de l'API minidom de
python.
J'arrive très bien à récupérer l'attribut d'une balise mais ça se gâte
lorsque je cherche à récupérer la valeur d'une balise.
Existe-t-il une méthode simple ? Merci par avance.

Mon fichier:
<data>
<item code = '123'>
<price>123</price>
</item>
<item code = '456'>
<price>456</price>
</item>
</data>

Mon code:
from xml.dom import minidom

docXML = minidom.parse('monfichier.xml')
for node in docXML.getElementsByTagName('item'):
# Je récupère bien la valeur de l'attribut
if node.getAttribute('code') == '456':
print "OK"
print node.getElementsByTagName('price')


Bonjour,

dans ton code, quand tu écris node.getElementsByTagName('price'), tu
récupères tous les fils qui ont pour nom 'price' dans une liste. Dans
ton cas la liste à un seul élément.

Tu peux faire n_price = node.getElementsByTagName('price')[0] pour avoir
l'élément en dom du noeud 'price'.

Si tu veux la "valeur", il faut récupérer le fils de ce noeud qui est un
noeud texte et récupérer le contenu de ce noeud texte. Dans ton cas :
n_price.firstChild.data


En plus simple je te conseille une autre librairie genre libxml2...


Jerome





En fait je teste l'élément code = 456 donc je ne récupère qu'un fils. Ta

méthode me convient donc très bien. Je regarderai quand même libxml2.
Merci et bonne journée.