我正在尝试解析一个大型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只假设子标签之外还有值。我想要所有这些。我如何得到所有这些?
感谢。
答案 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>