在lxml中关闭无文本的标签
我正在尝试用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>
其实没有什么意义。