在给定标签处将XML文件拆分为多个
问题内容:
我想将一个XML文件拆分为多个文件。我的工作站非常限于使用Xalan 2.7.1的Eclipse Mars。
我也可以使用Python,但以前从未使用过。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<NAME>Doe</NAME>
<FIRSTNAME>Jon</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>Mustermann</NAME>
<FIRSTNAME>Max</FIRSTNAME>
<GENDER>M</GENDER>
</row>
</root>
我怎样才能将它们变成这样
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<NAME>Doe</NAME>
<FIRSTNAME>Jon</FIRSTNAME>
<GENDER>M</GENDER>
</row>
</root>
我需要在带有标头的单个文件中的每个“行”数据。上面的数据仅是示例。大多数“行”数据具有16个属性,但有时会有所不同。
问题答案:
使用Python ElementTree。
创建一个文件,例如xmlsplitter.py。在下面添加代码(其中file.xml是您的xml文件,并假设每一行都有一个唯一的NAME元素。)。
import xml.etree.ElementTree as ET
context = ET.iterparse('file.xml', events=('end', ))
for event, elem in context:
if elem.tag == 'row':
title = elem.find('NAME').text
filename = format(title + ".xml")
with open(filename, 'wb') as f:
f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
f.write(ET.tostring(elem))
运行它
python xmlsplitter.py
或者,如果名称不是唯一的:
import xml.etree.ElementTree as ET
context = ET.iterparse('file.xml', events=('end', ))
index = 0
for event, elem in context:
if elem.tag == 'row':
index += 1
filename = format(str(index) + ".xml")
with open(filename, 'wb') as f:
f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
f.write(ET.tostring(elem))