【问题标题】:Problem on using lxml with tostring and pretty_print将 lxml 与 tostring 和 pretty_print 一起使用的问题
【发布时间】:2020-03-14 03:51:17
【问题描述】:

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

我正在使用 lxml 并尝试在 Python 3.6 上创建一个 xml 文件。

我发现的问题是元素没有被父元素包裹和排序,并且认为它与“pretty_print”选项有关。

我需要实现的是:

<root>
    <element1></element1>
    <element2></element2>
    <child1></child1>
    <child2></child2>
</root>

我得到的结果是:

<root><element1></element1><element2></element2><child1></child1><child2></child2></root>

我正在使用的部分代码:

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)

如果我打印没有数据的元素,它工作正常,“pretty_print”工作正常。

如果我向每个元素添加数据(使用上述变量),“pretty_print”将不起作用并且结构会变得混乱。

可能出了什么问题?

【问题讨论】:

  • 如果您能提供一个minimal reproducible example 会有所帮助。该代码包含未定义的变量,例如desiredvalue1。而且压痕不好。
  • 旧代码只是一个例子。代码运行良好,标识是由于复制/粘贴。编辑并添加了一些真实的代码。我无法发布结果,因为平台正在改变实际结果,但它以“b”开头,所有元素的值在同一行,没有“pretty_print”重新格式化
  • 抱歉打扰了,但我仍然无法复制、粘贴和运行您的代码。
  • 对不起。我忘了在顶部包含导入。将代码更改为更易于复制和粘贴,但结果与输出格式相同

标签: python lxml tostring pretty-print


【解决方案1】:

我找到了。

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

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

谢谢大家

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2010-12-26
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2013-06-19
    • 2019-09-23
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多