lxml write 排版问题

最近在开发一个安卓的文本资源的编辑器,使用的是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')


测试成功!


你可能感兴趣的:(Python)