使用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 12 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
pandas多级分组实现排序的方法
Apr 20 Python
python线程中同步锁详解
Apr 27 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
Python random库使用方法及异常处理方案
Mar 02 Python
Python中私有属性的定义方式
Mar 05 Python
python 发送邮件的四种方法汇总
Dec 02 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
example1.php
2006/10/09 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python基于twisted实现简单的web服务器
2014/09/29 Python
python中sleep函数用法实例分析
2015/04/29 Python
Python连接DB2数据库
2016/08/27 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
pip命令无法使用的解决方法
2018/06/12 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
《充气雨衣》教学反思
2014/04/07 职场文书
啦啦队口号大全
2014/06/16 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
劳资员岗位职责
2015/02/13 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书