如何在Python中打印xml文件?

时间:2013-06-21 08:40:42

标签: python lxml

我想使用lxml整理一个复杂的xml文件。问题是它有许多具有尾部的元素。例如,有一个像这样的xml:

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

我想把它整理成这个:

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

我首先尝试在lxml中使用remove_blank_text解析器来应用pretty_print。但它失败了。

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'

2 个答案:

答案 0 :(得分:0)

如果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中,则可能需要添加代码来处理xml属性。

编辑:以上将以

格式打印
<tag>
    text
</tag>

您可以根据需要进一步修改它。

答案 1 :(得分:0)

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

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