我想使用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'
答案 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))