据我所知,没有办法通过xml.etree.ElementTree方法来实现你的目标.通过挖掘xml.etree源代码和xml规范,我发现库的行为没有错,也没有道理.无论如何它不允许你正在寻找的输出.
要使用该库实现目标,您必须自定义渲染行为.为了最好地满足您的需求,我编写了以下渲染功能.
from xml.etree import ElementTree as ET
from re import findall, sub
def render(root, buffer='', namespaces=None, level=0, indent_size=2, encoding='utf-8'):
buffer += f'<?xml version="1.0" encoding="{encoding}" ?>\n' if not level else ''
root = root.getroot() if isinstance(root, ET.ElementTree) else root
_, namespaces = ET._namespaces(root) if not level else (None, namespaces)
for element in root.iter():
indent = ' ' * indent_size * level
tag = sub(r'({[^}]+}\s*)*', '', element.tag)
buffer += f'{indent}
for ns in findall(r'{[^}]+}', element.tag):