如何使用iterparse获取xml片段

时间:2015-07-15 05:24:02

标签: python xml

我正在尝试解析一个大型XML KML文件。 在python脚本中,我有以下命令:

import xml.etree.ElementTree as Etree
for event, elem in Etree.iterparse("tracts.kml", events=('start', 'end')):
     if event == 'end' and elem.tag == '{http://www.opengis.net/kml/2.2}MultiGeometry':
          print(elem)

xml看起来像这样:

<MultiGeometry>
     <Polygon>
         <Altitude>
         </Altitude>
         <coordinates>
         </coordinates>
     </Polygon>
</MultiGeometry>

我想要的是导出<MultiGeometry></MultiGeometry>内的文字,以在每个文本中包含子标记和文字。

意味着输出是一个字符串,其格式如下:<Polygon>...</Polygon>

elem.text只假设子标签之外还有值。我想要所有这些。我如何得到所有这些?

感谢。

1 个答案:

答案 0 :(得分:1)

如果需要xml元素的完整字符串,可以使用ElementTree.tostring()函数。请注意,这会返回一个字节字符串,(使用传递给方法的编码进行编码,编码的默认值为'us-ascii'),您需要decode()该值才能获得实际字符串。

示例 -

>>> import xml.etree.ElementTree as ET
>>> r = ET.fromstring('''<MultiGeometry>
...      <Polygon>
...          <Altitude>
...          </Altitude>
...          <coordinates>
...          </coordinates>
...      </Polygon>
... </MultiGeometry>''')
>>> ET.tostring(r)
b'<MultiGeometry>\n     <Polygon>\n         <Altitude>\n         </Altitude>\n         <coordinates>\n         </coordinates>\n     </Polygon>\n</MultiGeometry>'
>>> print(ET.tostring(r).decode())
<MultiGeometry>
     <Polygon>
         <Altitude>
         </Altitude>
         <coordinates>
         </coordinates>
     </Polygon>
</MultiGeometry>