用双引号标题属性编写lxml.etree

时间:2017-10-04 13:30:14

标签: python lxml

我使用lxml tutorial创建了一个基本的xml树:

from lxml import etree
root = etree.Element("root")
root.append( etree.Element("child1") )
child2 = etree.SubElement(root, "child2")
child3 = etree.SubElement(root, "child3")
print(etree.tostring(root, pretty_print=True, encoding="UTF-8", xml_declaration=True))

这会产生以下结果:

<?xml version='1.0' encoding='UTF-8'?>
<root>
  <child1/>
  <child2/>
  <child3/>
</root>

我的问题是,如何使用双引号文件头生成xml文件,即

<?xml version="1.0" encoding="UTF-8"?>
....

2 个答案:

答案 0 :(得分:4)

要添加标题而不进行手动连接,您需要在tostring方法中使用“ doctype”参数,如下所示:

        with open(output_file, 'wb') as o:
            o.write(etree.tostring(
                document_root, pretty_print=True,
                doctype='<?xml version="1.0" encoding="ISO-8859-1"?>'
            ))

答案 1 :(得分:0)

我现在唯一的解决方案就是这个功能:

def wrTmp(treeObject, filepath):
    xml_str = ('<?xml version="1.0" encoding="UTF-8"?>' + '\n' +
               etree.tostring(treeObject, pretty_print=True, encoding="UTF-8",
                              xml_declaration=False))
    with open(filepath, 'wb') as xml_file:
        xml_file.write(xml_str)

该函数连接两个字符串。一个是文件头和换行符,另一个是xml树的其余部分。

有没有人知道更多&#34; Pythonic&#34;这样做的方法?