在lxml中关闭没有文本的标记

时间:2010-05-05 07:47:37

标签: python lxml

我正在尝试使用Python和lxml

输出XML文件

但是,我注意到一件事,如果标签没有文字,它就不会自行关闭。这方面的一个例子是:

root = etree.Element('document')
rootTree = etree.ElementTree(root)
firstChild = etree.SubElement(root, 'test')

这个输出是:

<document>
<test/>
</document

我希望输出为:

<document>
<test>
</test>
</document>

所以基本上我想关闭一个没有文本的标签,但是用于属性值。我怎么做?而且,这样的标签叫什么?我会用谷歌搜索它,但我不知道如何搜索它。

3 个答案:

答案 0 :(得分:7)

请注意,<test></test><test/>的含义完全相同。你想要的是test-tag实际上有一个包含在单个换行符中的文本。但是,没有文字的空标记通常写为<test/>,坚持将其显示为<test></test>毫无意义。

答案 1 :(得分:5)

澄清@ymv答案,以防它可能对其他人有所帮助:

from lxml import etree

root = etree.Element('document')
rootTree = etree.ElementTree(root)
firstChild = etree.SubElement(root, 'test')

print(etree.tostring(root, method='html'))
### b'<document><test></test></document>'

答案 2 :(得分:2)

使用lxml.html.tostring序列化为HTML

import lxml.html
root = lxml.html.fromstring(mydocument)
print(lxml.html.tostring(root))