2017-10-09 5 views
0

私は図のようにxmlファイルを持っています。は、固定数の要素をxmlファイルで一度に反復処理します。 python要素ツリー

<?xml version="1.0" encoding="UTF-8"?> 
<DataRoot> 
    <Data> 
    <Data> 
    <Data> 
     <child> 
      ....text.... 
     </child> 
    </Data> 
    <Data> 
    <Data> 
    <Data> 
    <Data> 
     . 
     . 
     . 
</DataRoot> 

私の要件は、各ファイル内の<Data>要素の固定数を持つ小さなXMLファイルにこのXMLを分割することです。 <Data>をxmlに分割することはできますが、固定番号<Data>の要素を取ってファイルを作成することはできません。

<DataRoot> 
    <Data> 
</DataRoot> 

FILE2: FILE1:

私の出力がある

<DataRoot> 
    <Data> 
</DataRoot> 

しかし、必要な出力は次のようになります。

FILE1:

<DataRoot> 
    <Data> 
    <Data> 
    <Data> 
</DataRoot> 

ファイル2:

<DataRoot> 
    <Data> 
    <Data> 
    <Data> 
</DataRoot> 

ここは私のコードです。形成されるファイルの

import os 
    import xml.etree.ElementTree as ET 
    import lxml.etree as LT 

    file_path = 'filepath\\file.xml' 
    file_name = (os.path.splitext((os.path.basename("%s"%file_path)))[0]) 
    print file_name 

    tree = ET.ElementTree(file='%s'%file_path) 
    tre = LT.ElementTree(file='%s'%file_path) 
    root = tree.getroot().tag 


    i = 0 
    for elm in (tree.findall('Data')): 
     text = ET.tostring(elm) 
     i += 1 
     filename = "%d"%i+"_of_%s"%file_name+".xml" 
     with open(filepath\\%s'%filename, 'wb') as f: 
      f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") 
      f.write(("<"+ "%s"%root+">")) 
      f.write(text) 
      f.write(("</"+ "%s"%root+">")) 
      f.close() 

数は、それは私が

答えて

0

だけ追加し、事前に2 おかげで、ランダム数を与えた説明では、ソースXML文書のサイズに依存して、2ではありませんカウンターを開き、次のファイルにいつ移動するかを確認してください:

i = 0 
per_file = 5 # number of data per xml-file 
file_counter = 1 
filename = "%d"%file_counter+"_of_%s"%file_name+".xml" 
f = open('C:\\Users\\kmjn026\\Desktop\\Data_MLT\\%s'%filename, 'wb') 

for elm in (tree.findall('Document')): 
    text = ET.tostring(elm) 

    if i % per_file == 0 and i > 0: 
     file_counter += 1 
     f.write(("</"+ "%s"%root+">")) 
     f.close() 
     filename = "%d"%file_counter+"_of_%s"%file_name+".xml" 
     f = open('C:\\Users\\kmjn026\\Desktop\\Data_MLT\\%s'%filename, 'wb') 
     f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") 
     f.write(("<"+ "%s"%root+">")) 


    f.write(text) 
    i += 1 

f.write(("</"+ "%s"%root+">")) 
f.close() 
関連する問題