使用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解析模块(ConfigParser)使用方法
Dec 10 Python
Python中的列表生成式与生成器学习教程
Mar 13 Python
Python多线程原理与用法详解
Aug 20 Python
python 自动重连wifi windows的方法
Dec 18 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
Python自定义一个异常类的方法
Jun 27 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
Python字符串中删除特定字符的方法
Jan 15 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Python3.10的一些新特性原理分析
Sep 15 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
PHP中for与foreach的区别分析
2011/03/09 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP判断变量是否为0的方法
2014/02/08 PHP
php生成动态验证码gif图片
2015/10/19 PHP
php检查页面是否被百度收录
2015/10/28 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
python中reload(module)的用法示例详解
2017/09/15 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
法学专业应届生求职信
2013/10/16 职场文书
数控个人求职信范文
2014/02/03 职场文书
仓管员岗位责任制
2014/02/19 职场文书
人事专员的岗位职责
2014/03/01 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
节水倡议书
2015/01/19 职场文书
联谊活动总结范文
2015/05/09 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
Vue Element plus使用方法梳理
2022/12/24 Vue.js