使用python,minidom ..
我正在阅读一个格式很好的xml文件,然后再添加元素,然后再将其写回文件。
除了新增元素的格式外,一切正常。
看起来像,
<previousTag>
.. everything which was already in the xml file is correctly formatted.
<addedTag1><addedTag2></addedTag2></addedTag1></previousTag>
而我想要
<previousTag>
<addedTag1>
<addedTag2>
</addedTag2>
</addedTag1>
</previousTag>
我尝试使用toprettyxml()将整个事物转换为prettyxml。 但它看起来像
<previousTag>
..so many unwanted whitespaces inbetween already existing tags..
<addedTag1>
<addedTag2>
</addedTag2>
</addedTag1>
..whitespaces..
</previousTag>
答案 0 :(得分:0)
您需要自己剥离空白,或通知解析器为您执行此操作(如果可能)。
我花了几分钟时间尝试使用minidom查看源代码来查找可用的解析器配置选项,说实话,我不能再进一步查看,因为使用lxml.etree
进行了详细记录:
from lxml import etree
sample = """
<previousTag>
<previousSubElement1>Foo</previousSubElement1>
<previousSubElement2>Bar</previousSubElement2>
</previousTag>
"""
doc = etree.XML(sample,etree.XMLParser(remove_blank_text=True))
addedTag1 = doc.makeelement('addedTag1')
addedTag2 = doc.makeelement('addedTag2')
addedTag2.text = "Baz"
addedTag1.append(addedTag2)
doc.append(addedTag1)
print etree.tostring(doc,pretty_print=True)
产量:
<previousTag>
<previousSubElement1>Foo</previousSubElement1>
<previousSubElement2>Foo</previousSubElement2>
<addedTag1>
<addedTag2>Baz</addedTag2>
</addedTag1>
</previousTag>
还有其他方法可以使用lxml.etree
修改XML对象,这只是一个快速而肮脏的例子。