【问题标题】:How to pretty print an xml file in Python?如何在 Python 中漂亮地打印 xml 文件?
【发布时间】:2013-06-21 08:40:42
【问题描述】:

我想整理一个复杂的 xml 文件,使用 lxml。问题是它有很多有尾巴的元素。比如有个这样的xml:

 <body><part>n</part> attend </body>

我想把它整理成这样:

 <body>
    <part>n</part> attend 
 </body>

我一开始尝试在 lxml 中应用 pretty_print 和 remove_blank_text 解析器。但是失败了。

import lxml.etree as ET
xml_doc = '<body><part>n</part> attend </body>'
parser = ET.XMLParser(remove_blank_text=True)
root = ET.fromstring(xml_doc, parser)
print(ET.tostring(root, pretty_print=True))
>>>b'<body><part>n</part> attend </body>\n'

然后,我再次尝试,但没有应用解析器。

import lxml.etree as ET
xml_doc = '<body><part>n</part> attend </body>'
root = ET.fromstring(xml_doc)
print(ET.tostring(root, pretty_print=True))
>>>b'<body><part>n</part> attend </body>\n'

【问题讨论】:

    标签: python lxml


    【解决方案1】:

    如果 pretty_print 属性没有帮助,您可能可以编写自己的递归方法来进行漂亮的打印。有点像

    def pprint(root, indentTabs = 0): print "<%s%s>" % (indentTabs*"\t", root.tag) print (indentTabs+1)*"\t" + root.value for element in root.children(): pprint (element, indentTabs+1) print "</%s%s>" % (indentTabs*"\t", root.tag)

    虽然可能有一些已经可用的选项。上述方法只处理标签。如果它们存在于您的 xml 中,您可能还需要添加代码来处理 xml 属性。

    编辑:以上将以格式打印

    文本

    你可以根据你需要的输出进一步修改。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,使用 tounicode() 为我解决了这个问题。

      print(ET.tounicode(root, pretty_print=True))
      

      【讨论】:

        猜你喜欢
        • 2017-12-19
        • 1970-01-01
        • 2015-05-03
        • 2010-09-05
        相关资源
        最近更新 更多