当前位置: 首页 > 面试题库 >

如何获得Python的ElementTree精美打印到XML文件?

裘臻
2023-03-14
问题内容

我正在使用SQLite访问数据库并检索所需的信息。我正在Python 2.6版中使用ElementTree来创建具有该信息的XML文件。

import sqlite3
import xml.etree.ElementTree as ET

# NOTE: Omitted code where I acccess the database,
# pull data, and add elements to the tree

tree = ET.ElementTree(root)

# Pretty printing to Python shell for testing purposes
from xml.dom import minidom
print minidom.parseString(ET.tostring(root)).toprettyxml(indent = "   ")

#######  Here lies my problem  #######
tree.write("New_Database.xml")

尝试次数

我已经尝试使用tree.write("New_Database.xml", "utf-8")它代替上面的最后一行代码,但是它根本没有编辑XML的布局-
仍然是一团糟。

我还决定摆弄一下,然后尝试做:而不是将其打印到Python shell上,这会产生错误
AttributeError:’unicode’对象没有属性’write’*
tree = minidom.parseString(ET.tostring(root)).toprettyxml(indent = " ")
*

问题

当我在最后一行将树写入XML文件时,是否有办法像在Python Shell上一样漂亮地打印到XML文件?

我可以toprettyxml()在这里使用还是有其他方法来做到这一点?


问题答案:

无论您的XML字符串是什么,您都可以通过打开一个用于将字符串写入文件的文件将其写入您选择的文件中。

from xml.dom import minidom

xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent="   ")
with open("New_Database.xml", "w") as f:
    f.write(xmlstr)

有一种可能的复杂性,尤其是在Python
2中,它对字符串中的Unicode字符的要求不那么严格,也不太复杂。如果您的toprettyxml方法退回Unicode字符串(u"something"),则可能需要将其转换为合适的文件编码,例如UTF-8。例如,将一个写行替换为:

f.write(xmlstr.encode('utf-8'))


 类似资料:
  • 问题内容: 如何使Jackson的build()方法漂亮地打印其JSON输出?这是一个漂亮地打印丑陋形式的JSON代码的示例。我需要采用漂亮的JSON代码版本,然后将其简化为丑陋的FOM。如何做呢?我需要将其转换为: 对此: 我试图删除’\ n’,’\ t’和’‘字符;但是值中可能包含某些字符,所以我不能这样做。还有什么可以做的? 问题答案: Jackson允许您从JSON字符串读取,因此将漂亮打

  • 问题内容: 在Python中打印XML的最佳方法(或多种方法)是什么? 问题答案:

  • 问题内容: 我需要在xml的第三个块上合并两个xml文件。因此,文件A.xml和B.xml如下所示: A.xml B.xml 我需要合并“结果” 到目前为止,我所做的是: 如您所见,我将初始xml_element_tree分配给具有标题等的数据,然后使用“结果”扩展。但是,这给了我这个: 结果需要放在底部。任何帮助将不胜感激。 问题答案: 虽然这大部分是重复的,并且可以在这里找到答案,但我已经做到

  • 问题内容: 我有一个JSON文件,我想把它弄得一团糟-在python中最简单的方法是什么?我知道PrettyPrint带有一个“对象”,我认为它可以是一个文件,但是我不知道如何传递文件-仅使用文件名不起作用。 问题答案: 该模块已经使用参数实现了一些基本的漂亮打印: 要解析文件,请使用json.load():

  • 问题内容: 这是Sun教程中的基本打印程序示例: 当显示打印对话框时(第二行),用户可以选择仅打印文档中的页面范围。我能以某种方式获得要打印的页数吗?例如,如果我有一个25页的文档,但是用户选择打印4-10的范围,那么将只打印7页。是否有某种方式可以访问该信息? 我需要它来显示进度条,该进度条随着每打印一页的增加而增加,但是为此,我需要知道将要打印的总页数。 那我怎么得到那个数字呢? 问题答案:

  • 问题内容: 为什么尝试直接打印到文件而不是产生以下语法错误: 从帮助(builtins),我有以下信息: 那么将标准流打印写入更改为什么正确的语法呢? 我知道有不同的也许更好的写入文件的方法,但是我真的不明白为什么这应该是语法错误… 一个很好的解释将不胜感激! 问题答案: 如果要在Python 2中使用该函数,则必须从导入: 但是,即使不使用该函数,也可以达到相同的效果: