Python minidom解析器:忽略具有相同属性值的标记

时间:2012-07-25 19:01:54

标签: python list attributes minidom

尝试将xml解析为文本我得到了类似的东西,

输入文件

<Item id="1"></Item>
<Item id="2"></Item>
<Item id="1"></Item>
<Item id="2"></Item>

CURRENT OUTPUT

 Item ->1
 Item ->2
 Item ->2
 Item ->1

我希望的输出是,

Item ->1
Item ->2

(忽略重复的id值)

我用来获取CURRENT OUTPUT的当前代码是,

list = node.getElementsByTagName('Item')
for item in list:
  output_id = item.getAttribute('id')
  print "Item ->", output_id

我已尝试了数千个列表删除方法,但它们都输出了双重ID。非常感谢帮助。 TKS

2 个答案:

答案 0 :(得分:3)

首先,每个DOM解析器都会返回doubled,因为它们是不同的元素。 要避免,请通过dom树并将结果存储在dict对象中。这将只为您提供最后的项目。

<强> UPD:

list = node.getElementsByTagName('Item')
items = {}
for item in list:
  output_id = item.getAttribute('id')
  items[output_id] = item # Put items into dict to use them later.
for id in items:
  print "Item[%d] -> %s" % (id, items[id]) # Only single item per id left.

更多'pythonic'方式:

list = node.getElementsByTagName('Item')
items = dict((item.getAttribute('id'), item) for item in list)
for id in items:
  print "Item[%d] -> %s" % (id, items[id]) # Only single item per id left.

答案 1 :(得分:1)

请改用词典。 output_id作为键。

如果您想只包含每个id的最后一个元素:

list = node.getElementsByTagName('Item')
item_dict = {}
for item in list:
  output_id = item.getAttribute('id')
  item_dict [output_id] = item