5

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

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

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

这个的输出是:

<document>
<test/>
</document

我希望输出为:

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

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

4

4 回答 4

7

请注意,它<test></test><test/>含义完全相同。您想要的是 test-tag 实际上确实有一个包含在单个换行符中的文本。然而,一个没有文本的空标签通常写为<test/>,坚持让它显示为 . 是没有意义的<test></test>

于 2010-05-05T07:53:43.393 回答
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>'
于 2014-07-26T15:52:48.920 回答
2

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

import lxml.html
root = lxml.html.fromstring(mydocument)
print(lxml.html.tostring(root))
于 2010-05-05T07:54:50.183 回答
1

像这样使用空字符串'':

root = etree.Element('document')
etree.SubElement(root, 'test').text = ''
于 2017-08-11T14:55:56.617 回答