强制 ElementTree 使用结束标签

问题描述 投票:0回答:2

而不是:

<child name="George"/>

在 XML 文件中,我需要:

<child name="George"></child>

一个丑陋的解决方法是将空格写入文本(不是空字符串,因为它会忽略它):

import xml.etree.ElementTree as ET
ch = ET.SubElement(parent, 'child')
ch.set('name', 'George')
ch.text = ' '

然后,由于我使用的是Python 2.7,所以我阅读了Python etree控件空标签格式,并尝试了html方法,如下所示:

ch = ET.tostring(ET.fromstring(ch), method='html')

但这给出了:

TypeError: Parse() argument 1 must be string or read-only buffer, not Element

我不知道我应该做什么来解决它。有什么想法吗?

python xml string python-2.7 elementtree
2个回答
5
投票

如果有人对其他 Python 版本感到好奇,例如,here,您可以使用

short_empty_elements
参数。

例如

>>> import xml.etree.ElementTree as ET
>>> ET.tostring(ET.Element("mytag"), encoding='unicode', short_empty_elements=False)
'<mytag></mytag>'

(我相信这适用于Python 3.6版本)

正如@mzjn 所指出的,

short_empty_elements
从 3.4 开始可用。


3
投票

如果你这样做,它应该在 2.7 中工作得很好:

from xml.etree.ElementTree import Element, SubElement, tostring

parent = Element('parent')
ch = SubElement(parent, 'child')
ch.set('name', 'George')

print tostring(parent, method='html')
#<parent><child name="George"></child></parent>

print tostring(child, method='html')
#<child name="George"></child>
© www.soinside.com 2019 - 2024. All rights reserved.