使用lxml中的Element将每个属性以换行符打印出来

9
我试图从一个 Element 对象中打印 XML,这样格式化就允许我们在新行中打印标签属性。
    elem = etree.Element()  //Some element
    str = etree.tostring(elem, pretty_print=True)

目前的输出结果如下:
    <module name="A" description="abc" type="xyz">
        <container/>
    </module>

需要格式化

    <module 
      name="A" 
      description="abc" 
      type="xyz">
      <container/>
    </module>

是否有现有的库允许我们在标签中的所有属性上打印换行符。

1个回答

1
我了解到,Etree无法以那种方式格式化属性。您可以尝试使用tidylib(http://www.html-tidy.org/)进行格式化。在Ubuntu上,您可以执行以下操作:
sudo apt install tidy
sudo pip install tidylib

然后,要将每个属性格式化到新行中,请尝试以下操作:

>>> from tidylib import tidy_document
>>> k = """<module name="A" description="abc" type="xyz">
        <container/>
    </module>
"""
>>> document, errors = tidy_document(k, options={'indent-attributes':'yes', 'input-xml':'yes'})
>>> print(document)
<module name="A"
        description="abc"
        type="xyz">
  <container />
</module>

Tidy是一个功能丰富的库,你可以在这里阅读更多关于indent-attributes特性的内容:http://api.html-tidy.org/tidy/quickref_5.6.0.html#indent-attributes


接近了,但它将第一个属性留在同一行上,然后与那里的开头对齐。这会根据标签名称的长度产生不均匀的缩进。 - IncredibleStorm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接