我目前正在生成由数百个格式良好的svg文件组成的 all.xml (约2GB)。
为了简化,我有类似的东西:
<svg width="100" height="100">
<metadata title="Cambodia"></metadata>
<geodata WEST="102.1" NORTH="14.7" EAST="107.8" SOUTH="10.3"></geodata>
<rect id="rectangle1" x="10" y="10" width="80" height="80" style="fill: purple;"></rect>
</svg>
<svg width="100" height="100">
<metadata title="France"></metadata>
<geodata WEST="-5" NORTH="51" EAST="10" SOUTH="41"></geodata>
<rect id="rectangle1" x="10" y="10" width="80" height="80" style="fill: blue;"></rect>
</svg>
<svg width="100" height="100">
<metadata title="Italy"></metadata>
<geodata WEST="8" NORTH="46" EAST="18" SOUTH="35"></geodata>
<rect id="rectangle1" x="10" y="10" width="80" height="80" style="fill: green;"></rect>
</svg>
...
我想获取每个svg元素及其标题,以便我可以将其打印到根据title
的值命名的文件,例如Cambodia-map.svg
,France-map.svg
和{{ 1}}。
如何从all.xml和&amp ;; grep每个svg各自的头衔价值?
然后很容易打印到以下文件中:
Italy-map.svg
答案 0 :(得分:2)
使用python:
import xml.etree.ElementTree as ET
context = ET.iterparse('all.xml', events=('end', ))
for event, elem in context:
if elem.tag == 'svg':
title = elem.find('metadata').attrib['title']
filename = '{}-map.svg'.format(title)
with open(filename, 'wb') as f:
f.write(ET.tostring(elem))
答案 1 :(得分:1)
您可以使用xml.etree.ElementTree
模块解析XML(我假设data
是保存XML的变量。您可以使用{{1}直接从all.xml
读取}):
ET.parse()
打印
>>> import xml.etree.ElementTree as ET
>>> root = ET.fromstring(data)
>>> for svg_ele in root.iter('svg'):
... print svg_ele.find('metadata').get('title')
...
一旦你有了这个,就可以更容易地在文件中获得上述信息:
Cambodia
France
Italy