0

私はxmlを持っています:

<?xml version="1.0" encoding="UTF-8"?>
<rows>
  <row>
    <ro new="TEMP_1">TEMP_11</ro>
    <ro new="TEMP_2">TEMP_12</ro>
   <ro new="TEMP_3">TEMP_13</ro>
  </row>
 <row>
    <ro new="TEMP_1">TEMP_14</ro>
    <ro new="TEMP_2">TEMP_15</ro>
    <ro new="TEMP_3">TEMP_16</ro>
  </row>
 </rows>

およびパーサー:

import xml.etree.cElementTree as ET

context = ET.iterparse('temp.xml', events=("start", "end"))
context = iter(context)

outList = []
for event,elem in context:
    tag = elem.tag
    value = elem.text
    outList.append(value)
print outList

出力リストを印刷するとき、私は受け取ります:

 ['\n', '\n', 'TEMP_11', 'TEMP_11', 'TEMP_12', 'TEMP_12', 'TEMP_13', 'TEMP_13', '\n', '\n', 'TEMP_14', 'TEMP_14', 'TEMP_15', 'TEMP_15', 'TEMP_16', 'TEMP_16', '\n', '\n']

リストに重複した値が表示されるのはなぜですか? 修正方法は?

4

2 に答える 2

2

開始イベントと終了イベントの両方で 2 回追加しているため、重複があります。

どちらか一方のイベント タイプのみをリッスンするか、繰り返しながらイベント タイプを調べます。前者を行うには、1 行の変更です。

context = ET.iterparse('temp.xml', events=('end',))

...または、他の理由で両方のイベント タイプをリッスンする場合:

for event, elem in context:
    if event == 'end':
        outList.append(elem.text)
于 2013-05-20T14:22:11.727 に答える
0

開始イベントと終了イベントが同じタグに対して発生するためです。また、これを行うポイントは何ですか:

context = iter(context)

iterparse() がイテレータを返すため、 context はすでにイテレータです。

于 2013-05-20T14:24:47.930 に答える