最近在开发一个安卓的文本资源的编辑器,使用的是Python中的lxml,在添加新node的时候遇到排版问题,先附上代码:
def xmladdstring(path, key, content):
root = xmlparse(path)
node = etree.Element('string', {'name': key})
node.text = content
root.getroot().append(node)
root.write(path, pretty_print=True, encoding='utf-8')
但是最后添加的元素并没有换行,也就是没有排版,即使pretty_print=True也是无效的。
最终在
http://lxml.de/FAQ.html#why-doesn-t-the-pretty-print-option-reformat-my-xml-output
找到答案
>>> parser = etree.XMLParser(remove_blank_text=True) >>> tree = etree.parse(filename, parser)必须在解析的时候添加
remove_blank_text=True
这样的话 pretty_print=True 才会真正有效
贴上完整代码:
def xmlparse(path):
parser = etree.XMLParser(encoding="utf-8", strip_cdata=False, remove_blank_text=True)
root = etree.parse(path, parser=parser)
return root
def xmladdstring(path, key, content):
root = xmlparse(path)
node = etree.Element('string', {'name': key})
node.text = content
root.getroot().append(node)
root.write(path, pretty_print=True, encoding='utf-8')
测试成功!