web-dev-qa-db-ja.com

ElementTreeから属性名と値を取得する

いくつかの属性を持つXML<root>要素があります。私はElementTreeパッケージを使用しています。

Xmlファイルからツリーを解析した後、ドキュメントルートを取得していますが、要求された属性、または属性のリスト全体を取得したいと考えています。

<root a="1" b="2" c="3">
    </blablabla>
</root>

ElementTreeを使用して<root>要素のすべての属性名と値を取得するにはどうすればよいですか?

11
Igal

Elementには、辞書である属性_.attrib_があります。単にそれを使用して マッピングメソッド キーまたは値を要求します:

_for name, value in root.attrib.items():
    print '{0}="{1}"'.format(name, value)
_

または

_for name in root.attrib:
    print '{0}="{1}"'.format(name, root.attrib[name])
_

または、.values()またはpython dictで使用可能な他のメソッドのいずれかを使用します。

個々の属性を取得するには、標準の サブスクリプション構文 を使用します。

_print root.attrib['a']
_
26
Martijn Pieters

ElementTree要素のattrib属性(getrootによって返されるルートなど)は辞書です。したがって、たとえば次のことができます。

from xml.etree import ElementTree
tree = ElementTree.parse('test.xml')
root = tree.getroot()
print root.attrib

あなたの例では、これが出力されます

{'a': '1', 'b': '2', 'c': '3'}
9
intuited

使用できるいくつかのNiceループは、タグ、テキスト、属性のxmlObjectの各要素に対して取得され、2レベルのXMLで機能します。反復するのに最適な方法ではありませんが、単純なことには役立ちます...

for headTag in xmlObject.getchildren():
    print headTag.tag, headTag.text, headTag.attrib
    for bodyTag in headTag.getchildren():
        print "\t", bodyTag.tag, bodyTag.text, bodyTag.attrib
3
Kobi K