使用 lxml 中的 Element 用换行符打印每个属性

arp*_*rpp 5 python xml lxml pretty-print

我正在尝试从 Element 对象中打印 XML,以便格式化允许我们在新行中打印标签属性。

    elem = etree.Element()  //Some element
    str = etree.tostring(elem, pretty_print=True)
Run Code Online (Sandbox Code Playgroud)

当前输出看起来像

    <module name="A" description="abc" type="xyz">
        <container/>
    </module>
Run Code Online (Sandbox Code Playgroud)

需要格式化

    <module 
      name="A" 
      description="abc" 
      type="xyz">
      <container/>
    </module>
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*gov 1

据我所知,Etree 无法格式化这样的属性。

或者,您可以尝试 tidylib(http://www.html-tidy.org/)进行格式化。

在 Ubuntu 上你可以这样做:

sudo apt install tidy
sudo pip install tidylib
Run Code Online (Sandbox Code Playgroud)

然后,要在新行上对每个属性进行格式化,请尝试以下操作:

>>> 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>
Run Code Online (Sandbox Code Playgroud)

Tidy 是一个庞大的库,具有许多功能,您可以indent-attributes在此处阅读有关该功能的更多信息:http://api.html-tidy.org/tidy/quickref_5.6.0.html#indent-attributes