【问题标题】:Python minidom parser: Ignore tag with identical attribute valuesPython minidom 解析器:忽略具有相同属性值的标记
【发布时间】:2012-07-25 19:01:53
【问题描述】:

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

输入文件

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

电流输出

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

我想要的输出是,

Item ->1
Item ->2

(忽略重复的 id 值)

我用来获取当前输出的当前代码是,

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

我已经尝试了数千种列表删除方法,但它们都输出了双 ID。帮助将不胜感激。 提示

【问题讨论】:

    标签: python list attributes minidom


    【解决方案1】:

    首先,每个 DOM 解析器都会返回双倍的 id,因为它们是不同的元素。 为避免,请遍历 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.
    

    【讨论】:

    • 刚学Python。我的背景是 C,除了结构形式之外,我不使用对象。您能否发送一个链接到我可以根据我所拥有的应用的代码?谢了。
    • 感谢两位,第一个示例通过将整数描述符更改为字符串来工作,而第二个示例仅打印最后一个 id。正是我需要的!
    【解决方案2】:

    改用字典。以 output_id 作为键。

    如果你只想让每个 id 的最后一个元素:

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

    【讨论】:

    • 刚学Python。我的背景是 C,除了结构形式之外,我不使用对象。您能否发送一个链接到我可以根据我所拥有的应用的代码?谢了。
    • 感谢您的方法,但它不断向我抛出重复。来自 Dair T'arg 的样品 #1 是唯一能够输出我需要的东西的样品。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多