0

我想使用 lxml 整理一个复杂的 xml 文件。问题是它有很多有尾巴的元素。例如,有一个这样的 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'
4

2 回答 2

0

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

print(ET.tounicode(root, pretty_print=True))
于 2015-03-07T12:02:05.640 回答
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 属性。

编辑:以上将以格式打印

<标签>
    文本
</tag>

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

于 2013-06-21T09:00:25.703 回答