【发布时间】:2017-02-09 13:29:13
【问题描述】:
我有一个脚本,它使用 xml.etree.ElementTree 来解析 XML 文件,并且应该将子元素添加到元素中。我有两种方法,它们在技术上都有效,但是当我使用 ET.dump(root) 转储整个 xml 时,都会导致格式/空白混乱
我使用 fromstring 的第一种方法
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
#snip
newgroup='''
<group>
<uuid>%s</uuid>
<id>%s</id>
<name>%s</name>
<desc>%s</desc>
</group>
''' % (g_uuid, g_id, g_name, g_desc)
access = root.find('access')
access.append(ET.fromstring(newgroup))
这导致组被添加为子组,但是在组的结束标记之后没有换行符并且第一个标记只有一个制表符,无论我在新组字符串中放入了多少制表符。
<group>
<uuid>f60e6b30-eec9-11e6-a5d4-2c768aabceca</uuid>
<id>2</id>
<name>newgroup</name>
<desc>Testing groups</desc>
</group></access>
我想知道为什么它为 group 的孩子正确地使用了空格,但却弄乱了 group 标签本身的格式。
第二种方法是用它的孩子构建一个组的 etree
newgroup = ET.Element('group')
ET.SubElement(newgroup, 'uuid').text = '%s' % g_uuid
ET.SubElement(newgroup, 'id').text = '%s' % g_id
ET.SubElement(newgroup, 'name').text = '%s' % g_name
ET.SubElement(newgroup, 'desc').text = '%s' % g_desc
access = root.find('access')
access.append(newgroup)
但随后整个 newgroup-tree 出现在一行中,根本没有换行符和制表符:
<group><uuid>f60e6b30-eec9-11e6-a5d4-2c768aabceca</uuid><id>2</id><name>newgroup</name><desc>Testing groups</desc></group></access>
我是 python 新手,不知道如何格式化字符串。那么如何美化这个东西,以便从脚本中得到格式良好的 XML 呢?
【问题讨论】: