69 votes

Comment extraire un attribut xml en utilisant Python ElementTree

Pour :

<foo>
 <bar key="value">text</bar>
</foo>

Comment puis-je obtenir de la "valeur" ?

xml.findtext("./bar[@key]")

Lance une erreur.

85voto

unutbu Points 222216

Ceci trouvera la première instance d'un élément nommé bar et retourner la valeur de l'attribut key .

In [52]: import xml.etree.ElementTree as ET

In [53]: xml=ET.fromstring(contents)

In [54]: xml.find('./bar').attrib['key']
Out[54]: 'value'

0 votes

@Stevoisiak, j'ai le même problème. <image height="940" id="0" name="C02032-390.jpg" width="1820"> <box label="Objects" occluded="1" xbr="255" xtl="0" ybr="624" ytl="509"> <attribute name="Class">Car</attribute> </box> </image> Je voudrais accéder à "Car" à partir de l'attribut.

11voto

raja ashok Points 2358

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()

2voto

Dipen Parmar Points 29

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)

0voto

möken Points 1

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)

0voto

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.com

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.

Powered by:

X