在lxml中关闭无文本的标签

6 投票
4 回答
5223 浏览
提问于 2025-04-15 22:22

我正在尝试用Python和lxml输出一个XML文件。

不过,我注意到一个问题:如果一个标签里面没有文字,它不会自动闭合。比如说:

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

这样输出的结果是:

<document>
<test/>
</document

我希望输出的结果是:

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

简单来说,我想让那些没有文字但有属性值的标签也能闭合。请问我该怎么做?还有,这种标签叫什么?我本来想在网上查一下,但我不知道该怎么搜索。

4 个回答

3

使用 lxml.html.tostring 可以将内容转换成 HTML 格式

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

为了更清楚地解释@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>'
7

注意,<test></test><test/> 是完全一样的意思。你想要的是这个测试标签里面实际上有一段文本,这段文本就是一个换行符。不过,通常情况下,如果标签里面没有任何文本,大家会写成 <test/>,坚持要它写成 <test></test> 其实没有什么意义。

撰写回答