我正在动态生成大量 XML 数据。每个文档都旨在测试处理它的软件中的特定功能。
一个文档由多个不同的块组成。为了简单起见,假设上面的文档是我使用的:
<doc>
<attributes>
<attr/>
<attr/>
</attributes>
<items>
<item/>
<item/>
<item/>
</items>
</doc>
attr
元素的数量各不相同,同样适用于元素的数量item
。然而,每个的结构不会改变(只有里面的数据)。
为了让我的 Python 脚本更具可读性,我存储了一堆模板 XML 文件,每个文件代表一个重复元素(如果有的话,还有它的所有子元素)。在我的主要脚本中使用lxml
创建doc
,attributes
和items
。给定的参数定义多少item
和attr
元素有需要是生成的XML文档中,我只是做一个循环,加载相应的模板,调整里面的数据,然后将其添加到相应的父(这里attributes
和items
元素):
from lxml import etree
attrs = 2
its = 10
root = etree.Element('doc')
root.addprevious(etree.Comment('...'))
doc = etree.ElementTree(root)
attributes = etree.SubElement(root, 'Attributes')
for a in range(0, attrs):
attr = etree.parse('attribute.xml', parser=etree.XMLParser(remove_comments=True))
attributes.append(attr.getroot()
items = etree.SubElement(root, 'Items')
for i in range(0, its):
item = etree.parse('item.xml', parser=etree.XMLParser(remove_comments=True))
items.append(item.getroot()
etree.tostring(doc, encoding='UTF-8', xml_declaration=True, pretty_print=True)
不过,我注意到一件事,这本身不是错误,但在查看生成的 XML 文档时相当明显 - 缩进在插入子树XML 的位置完全混乱。我可以通过使用一些 XML 格式化工具(例如 Visual Studio Code 或 Notepad++)来解决这个问题,但我想知道为什么会发生这种情况。
remove_blank_text=True
创建 XML 解析器时使用:
parser=etree.XMLParser(remove_blank_text=True, remove_comments=True)
这将删除所有可忽略的空白,并让后续的漂亮打印“从头开始”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句