我正在编写一个python应用程序,它使用minidom的toprettyxml()创建一个ElementTree(XML),然后将其写入文件;
final_tree = minidom.parseString(ET.tostring(root))
fdout.write(final_tree.toprettyxml(indent = ' ')
问题是,我没有附加任何文字的标签只出现一个标签,例如:
<sometag/>
我希望它是:
<sometag>
</sometag>
我想在不解析整个字符串的情况下(没有正则表达式)。 有人熟悉这种方式吗? 感谢。
答案 0 :(得分:3)
minidom.py
中的行为是硬连线的(请查看writexml()
中的class Element
方法)。它并不意味着要改变,但对于当前实现,你可以像这样对它进行修补:
from xml.dom import minidom
t = minidom.parseString('<a><b></b></a>')
def patcher(method):
def patching(self, *args, **kwargs):
old = self.childNodes
try:
if not self.childNodes:
class Dummy(list):
def __nonzero__(self): # Python2
return True
def __bool__(self): # Python3
return True
old, self.childNodes = self.childNodes, Dummy([])
return method(self, *args, **kwargs)
finally:
self.childNodes = old
return patching
t.firstChild.__class__.writexml = patcher(t.firstChild.__class__.writexml)
print t.toprettyxml()
但我当然不能推荐这样的黑客。