2015-10-20 122 views
0

我一直在尝试在python中的多个.xml文件中拆分一个大的.xml文件几天。事情是我还没有真正成功。所以在这里我要求你的帮助。在一个更大的.xml文件中拆分一个大的.xml文件(python)

我大.xml文件看起来是这样的:

<Root> 
    <Testcase> 
      <Info1>[]<Info1> 
      <Info2>[]<Info2> 
    </Testcase> 
    <Testcase> 
      <Info1>[]<Info1> 
      <Info2>[]<Info2> 
    <Testcase> 
    ... 
    ... 
    ... 
    <Testcase> 
      <Info1>[]<Info1> 
      <Info2>[]<Info2> 
    <Testcase> 
</Root> 

它拥有超过2000名儿童和我想要做的是分析在较小的.xml文件此.xml文件和分裂,每个100个孩子。这将导致20个新的.xml文件。

我该怎么做?

谢谢!

LE:

我试图解析使用xml.etree.ElementTree

import xml.etree.ElementTree as ET 
file = open('Testcase.xml', 'r') 
tree = ET.parse(file) 

total_testcases = 0 

for Testcase in root.findall('Testcase'): 
    total_testcases+=1 

nr_of_files = (total_testcases/100)+1 

for i in range(nr_of_files+1): 
    tree.write('Testcase%d.xml' % (i), encoding="UTF-8") 

的东西是.xml文件,我不知道如何具体只得到测试用例和复制他们到另一个文件...

+0

添加与*数据的XML文件*的样本。 –

+0

我google了一下,发现了这个:http://stackoverflow.com/questions/7336694/how-to-split-an-xml-file-the-simple-way-in-python。这似乎可以解决你的问题。 –

+0

我也看过那篇文章,但我不太明白它是如何工作的,也没有说它是如何用第一棵树的信息创建另一个文件的。此外,@ bad_keypoints,.xml中的信息是相关的,它看起来像我描述的。 – Ciobby

回答

1

其实,root.findall('Testcase')将返回一个“Testcase”子元素列表。 那么需要做的是:

  1. 创建根
  2. 添加子元素根。

这里是例子:

>>> tcs = root.findall('Testcase') 
>>> tcs 
[<Element 'Testcase' at 0x23e14e0>, <Element 'Testcase' at 0x23e1828>] 
>>> len(tcs) 
2 
>>> r = ET.Element('Root') 
>>> r.append(tcs[0]) 
>>> ET.tostring(r, 'utf-8') 
'<Root><Testcase>\n   <Info1>[]</Info1>\n   <Info2>[]</Info2>\n  </Testcase>\n  </Root>' 
+0

感谢@Rainman的回答,但是我怎样才能写入文件而不是使用ET.tostring(r,'utf-8')? – Ciobby

+0

创建xml文件并将ET.tostring的返回写入文件。 (“test.xml”,“w +”)作为f: f.write(ET.tostring(r,'utf-8')) – Rainman

+0

谢谢@Rainman,我设法做到了。谢谢你们! :d – Ciobby

相关问题