2016-09-27 344 views
0

我正在使用lxml编写一个XML文件。我能够在整个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后添加换行符。我也想避免任何缩进。我理想的输出文件应该是这样的:

<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> 

下面是我的代码框架:

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) 

任何建议,我怎么能实现我想要的输出?

回答

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") 

这是一种简单的方法来自定义换行符在整个文件中的位置。我将这个问题留待一两天,看看有没有人有更好的解决方案。