如何从XML中重复n个标记之间的行提取并继续到最后一个标记?

时间:2017-05-07 03:24:25

标签: python xmllint

我有一个包含2,500多个<Item>元素的XML文件。

下面的示例显示了示例布局。我想将<Item name="1st"><Item name="500th">之间的每一行复制到新文件中。然后从<Item name=501st">开始继续到下一个500,并将其写入新文件。结果是5个新文件。没有什么可以跳过的。

<Item name="1st"><ItemProperties>
<property>data</property><property>data</property>
</ItemProperties>
...
...
<Item name="500th"><ItemProperties>
<property>data</property><property>data</property>
</ItemProperties>

以下操作适用于前500个,但我不知道如何继续前一个结束标记。

xmllint --xpath "//Item[position()<=500]" FileName.XML > Output1.XML

有关示例,请参阅this link

1 个答案:

答案 0 :(得分:0)

import xml.etree.ElementTree as ET
xml_doc = ET.parse('table.xml')
results = xml_doc.getroot()
def chunkify(lst,n):
  # Split the list into 'n' equal parts
  return [ lst[i::n] for i in xrange(n) ]

count = 1
for f in chunkify(results,5):
  temp_str = ''
  for element in f:
    temp_str = temp_str + ET.tostring(element)
  with open(str(count) +"_Output.xml", "w") as text_file:
    text_file.write(temp_str)
  count = count +1