pythonllxml在创建xml-fi时在特定节点之间添加换行符

2024-09-29 00:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用lxml编写一个XML文件。我可以将整个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参数进行打印:

^{pr2}$

但是,我想写入我的文件,并且只在每个重新复制节点之后添加一个换行符。我也希望避免任何压痕。理想的输出文件如下所示:

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

有什么建议可以让我达到预期的效果?在


Tags: 文件nodedatehdrbatchdtprettyprice
1条回答
网友
1楼 · 发布于 2024-09-29 00:22:56

我的解决方案是忽略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")

这是自定义文件中换行符位置的简单方法。我把这个问题留待一两天,看看是否有人能找到更好的解决办法。在

相关问题 更多 >