Python etree控制空标记格式

tpg*_*114 11 python xml

使用Python的etree创建XML文件时,如果我们使用文件写入空标记SubElement,我会得到:

<MyTag />
Run Code Online (Sandbox Code Playgroud)

不幸的是,我们在Fortran中使用的XML解析器库虽然它是一个正确的标签,却无法处理它.它需要看到:

<MyTag></MyTag>
Run Code Online (Sandbox Code Playgroud)

有没有办法改变格式规则或etree中的某些东西使其工作?

Mar*_*ers 13

从Python 3.4开始,您可以使用函数方法short_empty_elements参数:tostring()ElementTRee.write()

>>> from xml.etree import ElementTree as ET
>>> ET.tostring(ET.fromstring('<mytag/>'), short_empty_elements=False)
b'<mytag></mytag>'
Run Code Online (Sandbox Code Playgroud)

在较旧的Python版本(2.7到3.3)中,作为解决html方法,您可以使用该方法写出文档:

>>> from xml.etree import ElementTree as ET
>>> ET.tostring(ET.fromstring('<mytag/>'), method='html')
'<mytag></mytag>'
Run Code Online (Sandbox Code Playgroud)

无论是ElementTree.write()方法和tostring()功能支持的method关键字参数.

甚至在早期版本的Python(2.6及更早版本)中,您都可以安装外部ElementTree库; 1.3版支持该关键字.

是的,这听起来有点奇怪,但html输出主要输出空元素作为开始和结束标记.有些元素最终仍然是空标记元素; 具体地<link/>,<input/>,<br/>和这样.仍然是,或者升级你的Fortran XML解析器来实际解析符合标准的XML!


khy*_*yox 5

这在Python 3.4中直接解决。从那时起,的write方法xml.etree.ElementTree.ElementTree具有以下short_empty_elements参数:

控制不包含任何内容的元素的格式。如果为True(默认值),则将它们作为单个自闭标签发出,否则将作为一对开始/结束标签发出。

有关更多详细信息,请参见xml.etree文档