Python 将lxml与tostring和pretty_print一起使用时出现的问题

Python 将lxml与tostring和pretty_print一起使用时出现的问题,python,lxml,tostring,pretty-print,Python,Lxml,Tostring,Pretty Print,我已经阅读了一些相关问题的答案,但没有一个与lxml tostring和pretty_print直接相关 我正在使用lxml并试图在python3.6上创建一个xml文件 我发现的问题是,元素没有按照父元素进行包装和排序,并且认为它与“pretty_print”选项有关 我需要实现的是: <root> <element1></element1> <element2></element2> <child1&g

我已经阅读了一些相关问题的答案,但没有一个与lxml tostring和pretty_print直接相关

我正在使用lxml并试图在python3.6上创建一个xml文件

我发现的问题是,元素没有按照父元素进行包装和排序,并且认为它与“pretty_print”选项有关

我需要实现的是:

<root>
    <element1></element1>
    <element2></element2>
    <child1></child1>
    <child2></child2>
</root>
如果我在没有数据的情况下打印元素,它可以正常工作,“pretty_print”也可以正常工作

如果我将数据添加到每个元素中(使用上述变量),那么“pretty_print”将无法工作,结构也会变得混乱

怎么了?我找到了

我已经从代码中删除了“header.tail='\n',它现在可以工作了

root = et.Element("root")
header = et.SubElement(root, 'Header')
#header.tail = '\n'

谢谢大家

如果你们能提供一个。代码包含未定义的变量,如
desiredvalue1
。缩进很糟糕。旧代码只是一个例子。代码运行正常,标识是由于复制/粘贴造成的。编辑并添加了一些真实的代码。我无法发布结果,因为平台正在更改实际结果,但它以“b”开头,所有元素的值都在同一行,没有“pretty_print”格式对不起,我是个唠叨者,但我仍然无法复制、粘贴和运行您的代码。对不起。我忘了在顶部加上进口。将代码更改为更易于复制和粘贴,但结果在输出格式上是相同的错误
from lxml import etree as et

CompanyID = "Company Identification"
TaxRegistrationNumber = "Company Reg. Number"
TaxAccountingBasis = "File Tipe"                   
CompanyName = "Company Name"
BusinessName = "Business Name"

root = et.Element("root")
header = et.SubElement(root, 'Header')
header.tail = '\n'

data = (
       ('CompanyID', str(CompanyID)),
       ('TaxRegistrationNumber', str(TaxRegistrationNumber)),
       ('TaxAccountingBasis', str(TaxAccountingBasis)),
       ('CompanyName', str(CompanyName)),
       ('BusinessName', str(BusinessName)),
     )

for tag, value in data:
    if value is None :
        continue
    et.SubElement(header, tag).text=value

xml_txt = et.tostring(root, pretty_print=True, encoding="UTF-8")
print(xml_txt)
root = et.Element("root")
header = et.SubElement(root, 'Header')
#header.tail = '\n'