我必须创建一个具有漂亮打印效果和编码声明的.xml文件。它应该看起来像这样:
\n<?xml version='1.0' encoding='utf-8'?>\n<main>\n <sub>\n <name>Ana</name>\n <detail />\n <type>smart</type>\n </sub>\n</main>\nRun Code Online (Sandbox Code Playgroud)\n我知道如何获得漂亮的打印和声明,但不是同时获得。\n要获得 UTF-8 声明,但没有漂亮的打印,我使用以下代码:
\nf = open(xmlPath, "w")\net.write(f, encoding='utf-8', xml_declaration=True) \nf.close()\nRun Code Online (Sandbox Code Playgroud)\n但是如果我想获得漂亮的打印结果,我必须将 xml 树转换为字符串,并且我将丢失声明。我使用这段代码:
\nfrom xml.dom import minidom\nxmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ")\nwith open(xmlPath, "w") as f:\n f.write(xmlstr.encode('utf-8'))\n f.close()\nRun Code Online (Sandbox Code Playgroud)\n通过最后的代码,我得到了漂亮的打印结果,只是第一行是:
\n<?xml version="1.0" ?>\nRun Code Online (Sandbox Code Playgroud)\n我不妨将其替换为
\n<?xml version='1.0' encoding='utf-8'?>\nRun Code Online (Sandbox Code Playgroud)\n但我不认为这是最Pythonesque的方法。
\n我使用 xml 模块,并且不喜欢安装额外的模块,因为该脚本必须使用标准 Python 从不同的计算机上运行。但如果不可能,我会安装其他模块。
\n稍后编辑:
\n最后,在 Lenz 的帮助下,我使用了这个:
\n#ET=lxml.etree\nxmlPath=os.path.join(output_folderXML ,"test.xml")\nxmlstr= ET.tostring(root, encoding='UTF-8', xml_declaration=True, pretty_print=True)\nwith open(xmlPath, "w") as f:\n …Run Code Online (Sandbox Code Playgroud)