获取python中的所有属性XML并将其编入字典

2024-10-02 18:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

XML格式:

<main>
    <item name="item1" image="a"></item>
    <item name="item2" image="b"></item>
    <item name="item3" image="c"></item>
    <item name="item4" image="d"></item>
</main>

Python:

xmldoc = minidom.parse('blah.xml')
itemlist = xmldoc.getElementsByTagName('item')
for item in itemlist :
    #####I want to make a dictionary of each item

所以我会得到

{'name':'item1','image':'a'}
{'name':'item2','image':'b'}
{'name':'item3','image':'c'}
{'name':'item4','image':'d'}

有人知道怎么做吗?有功能吗?


Tags: nameimageparsemain格式xmlitemblah
3条回答

我建议更喜欢较新的xml.etree.ElementTree标准模块,而不是xml.dom.minidom。请尝试以下操作:

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
for element in tree.getiterator('item'):
    print element.attrib

它印出来了

{'image': 'a', 'name': 'item1'}
{'image': 'b', 'name': 'item2'}
{'image': 'c', 'name': 'item3'}
{'image': 'd', 'name': 'item4'}

这里.getiterator('item')遍历树的所有元素并返回名为item的元素。每个元素的.attrib是元素属性的字典——这正是您想要的。

实际上,元素的行为就像子元素的列表。上面的属性是dictionary中的项,与DOM方法相比,ElemenTree更适合Python。

在上面的示例中添加以下代码:

print '----------------'
root = tree.getroot()
ET.dump(root)

print '----------------'
print root.tag
print root.attrib
for elem in root:
    print elem.tag, elem.attrib

它打印:

----------------
<main>
    <item image="a" name="item1" />
    <item image="b" name="item2" />
    <item image="c" name="item3" />
    <item image="d" name="item4" />
</main>
----------------
main
{}
item {'image': 'a', 'name': 'item1'}
item {'image': 'b', 'name': 'item2'}
item {'image': 'c', 'name': 'item3'}
item {'image': 'd', 'name': 'item4'}

使用thisPython配方:

from xml2obj import xml2obj

data = xml2obj(s)['item']

# data content:
>>> [{image:u'a', name:u'item1'},
>>>  {image:u'b', name:u'item2'},
>>>  {image:u'c', name:u'item3'},
>>>  {image:u'd', name:u'item4'}]

以下代码将创建词典(不需要其他库):

dicts = []
for item in itemlist:
    d = {}    
    for a in item.attributes.values():
        d[a.name] = a.value
    dicts.append(d)
print dicts

相关问题 更多 >