解析xml时列表中的值是否重复?

时间:2013-05-20 14:18:00

标签: python xml-parsing elementtree

我有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

当打印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']

为什么我在列表中收到重复值? 如何解决?

2 个答案:

答案 0 :(得分:2)

你有重复项,因为你要在开始事件和结束事件上追加两次。

只侦听一种事件类型或另一种事件类型,或在迭代时检查事件类型。做前者是一个单行改变:

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

...或者,如果您因其他原因想要收听这两种事件类型:

for event, elem in context:
    if event == 'end':
        outList.append(elem.text)

答案 1 :(得分:0)

因为同一个标签发生了开始和结束事件。此外,这样做有什么意义:

context = iter(context)

context已经是一个迭代器,因为iterparse()返回一个迭代器。

相关问题