使用PYTHON创建XML文档


Posted in Python onMarch 01, 2012

当用GOOGLE查的时候,内容几乎都是一样的。但是你想要的东西,一个也没有。例如,我就找不到中国人写的如何使用PYTHON来创建一个XML文件。当然,直接用文件写的方式也能够达到同样的效果,但是毕竟容易出错,而且看起来不优雅。最后,我看了很多资料,终于明白如何使用PYTHON写一个XML文件了。以下就是一个简单的例子,这个例子是已经调试通过的,大家可以放心使用。

import xml.dom.minidom 
from xml.dom.DOMImplementation import implementation 
import xml.sax.writer 
import xml.utils # Create a new document with no namespace uri, qualified name, 
# or document type 
document = implementation.createDocument(None,None,None) 
personnel = document.createElement("personnel") 
personnel.setAttribute('number', '5') 
document.appendChild(personnel) 
sexnode = document.createElement("sex") 
sexnode.appendChild(document.createTextNode("male")) 
namenode = document.createElement("name") 
namenode.appendChild(document.createTextNode("tianbin")) 
personnel.appendChild(sexnode) 
personnel.appendChild(namenode) 
out = open("tianbin.xml", "w") 
xml.dom.ext.PrettyPrint(document,out)

今天想使用python来创建一个xml文件。找了下资料,发现资料不是很多,基本上都是使用python来解析xml文件的。
比如我要将内容为

<?xml version="1.0" encoding="utf-8"?> 
<root> 
<book isbn="34909023"> 
<author> 
dikatour 
</author> 
</book> 
</root>

写入到xmlstuff.xml文件中去。
其实也很简单,基本原理如下:
我使用xml的DOM方式,先在内存中创建一个空的DOM树,然后不断增加我要的节点,最后形成我想要的DOM,最后输出到文件中去。
1.我使用xml.dom.minidom这个module来创建xml文件
from xml.dom import minidom
2. 每个xml文件都是一个Document对象,代表着内存中的DOM树
doc = minidom.Document()
3.有了空的DOM树后,我们在上面添加根节点
rootNode = doc.createElement("root")
doc.appendChild(rootNode) #注意python的library reference里说,createElement后并没有将节点对象加到DOM树上,需要自己手工加上
4.创建其它的节点
5.输出到xml文件中去
doc.writexml(f, "/t", "/t", "/n", "utf-8") #第一个参数f就是你的目标文件对象,第二个参数好像是<?xml>和下面一个根节点的缩进排列格式,
第三个参数好像是其他节点与子节点的缩进排列格式,第四个参数制定了换行的格式(如果你填入" ",那就不换行了,所有的xml都缩在了一行上面 :) )
,第五个参数制定了xml内容的编码。除了第一个参数是必须的,其他参数都是可选择的。
最终代码如下(这个程序没什么价值,只是用来测试验证自己的想法,你更可能定义一个简单类或函数,将你的数据结构序列化到xml文件中):
from xml.dom import minidom 
import traceback 
try: 
f = open("xmlstuff.xml", "w") 
try: 
doc = minidom.Document() 
rootNode = doc.createElement("root") 
doc.appendChild(rootNode) 
bookNode = doc.createElement("book") 
bookNode.setAttribute("isbn", "34909023") 
rootNode.appendChild(bookNode) 
authorNode = doc.createElement("author") 
bookNode.appendChild(authorNode) 
authorTextNode = doc.createTextNode("dikatour") 
authorNode.appendChild(authorTextNode) 
doc.writexml(f, "/t", "/t", "/n", "utf-8") 
except: 
trackback.print_exc() 
finally: 
f.close() 
except IOException: 
print "open file failed"

总结:
1. 目标(将一串xml字符串写到文件中)=>得到一串xml字符串=>dom树(minidom中有toxml方法将DOM树的xml信息输出成字符串)
2. 使用python 2.5 documentation(也就是安装python时一起安装的python手册)中的library reference中的第8章(structrued Markup Processing Tools),查阅手册很重要,另外查阅一些简明的python书籍
3.多思考,逻辑清晰了,即时象我一样对如何使用python操纵xml一无所知,稍微查下资料也就可以完成功能了
4. 恰好证明了python这门语言的强大的功能性 :) gets job done..
Python 相关文章推荐
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
详解Python文本操作相关模块
Jun 22 Python
Django中间件实现拦截器的方法
Jun 01 Python
python协程之动态添加任务的方法
Feb 19 Python
Python地图绘制实操详解
Mar 04 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
基于plt.title无法显示中文的快速解决
May 16 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
基于python的汉字转GBK码实现代码
Feb 19 #Python
python 装饰器功能以及函数参数使用介绍
Jan 27 #Python
Python常见文件操作的函数示例代码
Nov 15 #Python
python 控制语句
Nov 03 #Python
python 不关闭控制台的实现方法
Oct 23 #Python
python中将阿拉伯数字转换成中文的实现代码
May 19 #Python
python访问纯真IP数据库的代码
May 19 #Python
You might like
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
关于PHP中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
python如何实现反向迭代
2018/03/20 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
Python关于反射的实例代码分享
2020/02/20 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
会计应届生的自荐信
2013/12/13 职场文书
核心价值观演讲稿
2014/05/13 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
2014年教师节寄语
2014/08/11 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
维稳工作承诺书
2015/01/20 职场文书
瘦西湖导游词
2015/02/03 职场文书
签约仪式致辞
2015/07/30 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书