使用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中正则表达式的使用详解
Oct 17 Python
python实现超简单端口转发的方法
Mar 13 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
python中的lambda表达式用法详解
Jun 22 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
python实现FTP循环上传文件
Mar 20 Python
django model通过字典更新数据实例
Apr 01 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
php Ajax乱码
2008/04/09 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python中的进程分支fork和exec详解
2015/04/11 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
详解python运行三种方式
2019/05/13 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
幼儿园大班毕业教师寄语
2014/04/03 职场文书
梅花魂教学反思
2014/04/25 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
js实现自动锁屏功能
2021/06/02 Javascript
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript