使用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 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Python MySQL数据库连接池组件pymysqlpool详解
Jul 07 Python
python数字图像处理实现直方图与均衡化
May 04 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
python实现名片管理系统
Nov 29 Python
flask框架路由常用定义方式总结
Jul 23 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 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
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
javascript关于继承解析
2016/05/10 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
python实现批量监控网站
2016/09/09 Python
python实现BackPropagation算法
2017/12/14 Python
Python Requests库基本用法示例
2018/08/20 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
python实现学生通讯录管理系统
2021/02/25 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
心理健康教育心得体会
2013/12/29 职场文书
讲座主持词
2014/03/20 职场文书
高中教师评语大全
2014/04/25 职场文书
小学运动会班级口号
2014/06/09 职场文书
交通志愿者活动总结
2014/06/27 职场文书
个人批评与自我批评
2014/10/15 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
校运会班级霸气口号
2015/12/24 职场文书
初三数学教学反思
2016/02/17 职场文书
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL