1

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 値は無視されます)

CURRENT OUTPUT を取得するために使用している現在のコードは、

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

何千ものリスト削除メソッドを試しましたが、それらはすべて二重 ID を出力します。助けていただければ幸いです。Tks

4

2 に答える 2

3

最初は、すべての DOM パーサーは、異なる要素であるため、2 倍の ID を返します。回避するには、dom ツリーを通過し、結果をdictオブジェクトに格納します。これにより、最後のアイテムのみが取得されます。

更新:

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.
于 2012-07-25T19:12:48.913 に答える
1

代わりに辞書を使用してください。キーとしての output_id。

各 ID を持つ最後の要素のみを取得する場合:

list = node.getElementsByTagName('Item')
item_dict = {}
for item in list:
  output_id = item.getAttribute('id')
  item_dict [output_id] = item
于 2012-07-25T19:03:02.623 に答える