Pour :
<foo>
<bar key="value">text</bar>
</foo>
Comment puis-je obtenir de la "valeur" ?
xml.findtext("./bar[@key]")
Lance une erreur.
Pour :
<foo>
<bar key="value">text</bar>
</foo>
Comment puis-je obtenir de la "valeur" ?
xml.findtext("./bar[@key]")
Lance une erreur.
Obtenir la valeur de l'attribut de la balise enfant dans un XML en utilisant ElementTree
Analyser le fichier XML et obtenir le root
puis en utilisant [0]
nous donnera l'étiquette de premier enfant. De même, [1], [2]
nous donne les balises enfants suivantes. Après avoir obtenu la balise enfant, utilisez .attrib[attribute_name]
pour obtenir la valeur de cet attribut.
>>> import xml.etree.ElementTree as ET
>>> xmlstr = '<foo><bar key="value">text</bar></foo>'
>>> root = ET.fromstring(xmlstr)
>>> root.tag
'foo'
>>> root[0].tag
'bar'
>>> root[0].attrib['key']
'value'
Si le contenu xml est dans le fichier. Vous devez effectuer la tâche suivante pour obtenir le root
.
>>> tree = ET.parse('file.xml')
>>> root = tree.getroot()
Avec la méthode suivante, vous pouvez obtenir tous les attributs du xml (dans le dictionnaire).
import xml.etree.ElementTree as etree
xmlString= "<feed xml:lang='en'><title>World Wide Web</title><subtitle lang='en'>Programming challenges</subtitle><link rel='alternate' type='text/html' href='http://google.com/'/><updated>2019-12-25T12:00:00</updated></feed>"
xml= etree.fromstring(xmlString)
def get_attr(xml):
attributes = []
for child in (xml):
if len(child.attrib)!= 0:
attributes.append(child.attrib)
get_attr(child)
return attributes
attributes = get_attr(xml)
print(attributes)
La fonction dipenparmar12 ne retournera pas les attributs des enfants. Parce que la fonction est récursive, la liste des attributs sera remplacée par une liste vide à chaque appel. Cette fonction ne retournera pas l'enfant de l'enfant.
import xml.etree.ElementTree as etree
xml= etree.fromstring(xmlString)
def get_attr(xml, attributes):
for child in (xml):
if len(child.attrib)!= 0:
attributes.append(child.attrib)
get_attr(child,attributes)
return attributes
attributes = get_attr(xml,[])
print(attributes)
Votre expression :
./bar[@key]
Ça veut dire : bar
les enfants ayant key
attribut
Si vous voulez sélectionner l'attribut, utilisez cette expression relative :
bar/@key
Ça veut dire : le site key
l'attribut de bar
enfants
Bien sûr, vous devez envisager d'utiliser un moteur XPath totalement conforme comme lxml .
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.