2016-09-27 15 views
0

lxmlを使用してXMLファイルを作成しています。私は1つの行にXMLファイル全体を書き込むことができる午前:Pythonl lxml XMLファイルを作成するときに特定のノード間に改行を追加する

<FIXML><Batch Total="3"><Hdr SendTime="2016-09-27T13:32:19-05:00"/><RepeatingNode Price="0.99" RptID="1"><Date Dt="2016-09-20"/></RepeatingNode><RepeatingNode Price="2.49" RptID="2"><Date Dt="2016-09-20"/></RepeatingNode><RepeatingNode Price="0.25" RptID="3"><Date Dt="2016-09-20"/></RepeatingNode></Batch></FIXML> 

と私はpretty_printパラメータ使用して、それをpretty_printすることができる午前:しかし、私は私のファイルに書きたい

<FIXML> 
    <Batch Total="3"> 
     <Hdr SendTime="2016-09-27T13:32:19-05:00"/> 
     <RepeatingNode Price="0.99" RptID="1"> 
      <Date Dt="2016-09-20"/> 
     </RepeatingNode> 
     <RepeatingNode Price="2.49" RptID="2"> 
      <Date Dt="2016-09-20"/> 
     </RepeatingNode> 
     <RepeatingNode Price="0.25" RptID="3"> 
      <Date Dt="2016-09-20"/> 
     </RepeatingNode> 
    </Batch> 
</FIXML> 

をし、各ReapeatingNodeの後にのみ改行を追加してください。私はまた、字下げを避けたいと思います。私の理想的な出力ファイルは、次のようになります。

import lxml.etree as et 
fixml_node = et.Element("FIXML") 
batch_node = et.SubElement(fixml_node, "Batch") 
et.SubElement(batch_node, "Hdr") 

for row in data: 
    repeating_node = et.SubElement(batch_node, "RepeatingNode") 
    et.SubElement(repeating_node, "Date") 

complete_new_file = et.ElementTree(fixml_node) 

complete_new_file.write("output_file") 

# or below when pretty-printing 
complete_new_file.write("output_file", pretty_print=True) 

私は私の所望の出力を達成することができますどのように任意の提案:以下

<FIXML> 
<Batch Total="3"> 
<Hdr SendTime="2016-09-27T13:32:19-05:00"/> 
<RepeatingNode Price="0.99" RptID="1"><Date Dt="2016-09-20"/></RepeatingNode> 
<RepeatingNode Price="2.49" RptID="2"><Date Dt="2016-09-20"/></RepeatingNode> 
<RepeatingNode Price="0.25" RptID="3"><Date Dt="2016-09-20"/></RepeatingNode> 
</Batch> 
</FIXML> 

私のコードのためのフレームワークはありますか?

答えて

0

私の解決方法は、pretty_printパラメータを無視し、該当する場合は改行付きのテキストまたはテールを追加することです。以下の新しいコード:

import lxml.etree as et 

fixml_node = et.Element("FIXML") 
fixml_node.text = "\n" 

batch_node = et.SubElement(fixml_node, "Batch") 
batch_node.text = "\n" 
batch_node.tail = "\n" 

header_node = et.SubElement(batch_node, "Hdr") 
header_node.tail = "\n" 

for row in data: 
    repeating_node = et.SubElement(batch_node, "RepeatingNode") 
    repeating_node.tail = "\n" 

    et.SubElement(repeating_node, "Date") 

complete_new_file = et.ElementTree(fixml_node) 

complete_new_file.write("output_file") 

これは、ファイル全体で改行の位置をカスタマイズする簡単な方法です。誰かがより良いソリューションを持っているかどうかを確認するために、この質問を1日か2日開いたままにしておきます。

関連する問題