9

domノードのすべての属性を反復処理して、名前と値を取得したい

私はこのようなことを試しました(ドキュメントはこれについてあまり冗長ではなかったので、少し推測しました):

for attr in element.attributes:
    attrName = attr.name
    attrValue = attr.value
  1. forループも開始されません
  2. ループが機能するようになったら、属性の名前と値を取得するにはどうすればよいですか?

ループエラー:

for attr in element.attributes:
  File "C:\Python32\lib\xml\dom\minidom.py", line 553, in __getitem__
    return self._attrs[attname_or_tuple]
 KeyError: 0

Pythonは初めてですが、優しくしてください

4

3 に答える 3

17

それを簡単に行うための短くて効率的な(そしてpythonic?)方法があります

#since items() is a tUple list, you can go as follows :
for attrName, attrValue in element.attributes.items():
    #do whatever you'd like
    print "attribute %s = %s" % (attrName, attrValue)

達成しようとしているのが、これらの不便な属性NamedNodeMapをより使いやすい辞書に転送することである場合は、次のように進めることができます。

#remember items() is a tUple list :
myDict = dict(element.attributes.items())

http://docs.python.org/2/library/stdtypes.html#mapping-types-dict およびより正確な例を参照してください。

d = dict([('two', 2), ('one', 1), ('three', 3)])
于 2012-11-14T15:52:53.530 に答える
2

わかりました、この(やや最小限の)ドキュメントを見た後、私は次の解決策を成功させると思いました

#attr is a touple apparently, and items() is a list
for attr in element.attributes.items():
    attrName = attr[0] 
    attrValue = attr[1]
于 2012-07-25T20:36:32.557 に答える
1

属性はNamedNodeMap、辞書のように動作するが実際には辞書ではないを返します。代わりにiteritems()のループを試してください。attributes(通常のdictをループすると、とにかくキーがループするため、コードはどのような場合でも期待どおりに機能しないことに注意してください。)

于 2012-07-25T17:09:54.370 に答える