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

Python 关闭lxml中没有文本的标记,python,lxml,Python,Lxml,我正在尝试使用Python和lxml输出一个XML文件 然而,我注意到一件事,如果标记没有文本,它就不会自动关闭。这方面的一个例子是: root = etree.Element('document') rootTree = etree.ElementTree(root) firstChild = etree.SubElement(root, 'test') 其输出为: <document> <test/> </document 请注意,和的意思完全相同。您想要

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

然而,我注意到一件事,如果标记没有文本,它就不会自动关闭。这方面的一个例子是:

root = etree.Element('document')
rootTree = etree.ElementTree(root)
firstChild = etree.SubElement(root, 'test')
其输出为:

<document>
<test/>
</document


请注意,
的意思完全相同。您想要的是,测试标记实际具有包含在单个换行符中的文本。但是,没有文本的空标记通常写为
,坚持将其显示为

使用lxml.html.tostring序列化为html是毫无意义的

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

为了澄清@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>'
从lxml导入etree
root=etree.Element('document')
rootTree=etree.ElementTree(根)
firstChild=etree.SubElement(根“test”)
打印(etree.tostring(root,method='html'))
###b“
使用空字符串“”,如下所示:

root = etree.Element('document')
etree.SubElement(root, 'test').text = ''

您不能将值设置为换行符吗?这意味着
test
将有一个text类型的子节点,其值为
\n
。谢谢,但我不知道这等同于,而且这样做是公认的标准。Frank已经回答了我的问题,但如果需要,我可以随时使用\n。噢,谢谢。我没有意识到这一点。我认为要保持一致性,如果标记没有文本,但有一些属性,则必须关闭它。如果希望jQuery正确解析自定义元素,则更简单。
root = etree.Element('document')
etree.SubElement(root, 'test').text = ''