使用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 20 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
python线程、进程和协程详解
Jul 19 Python
Django自定义认证方式用法示例
Jun 23 Python
Python读取sqlite数据库文件的方法分析
Aug 07 Python
详解Python中的测试工具
Jun 09 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
numpy 声明空数组详解
Dec 05 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
在python中修改.properties文件的操作
Apr 08 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 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数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
javascript+xml技术实现分页浏览
2008/07/27 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
超市客服工作职责
2014/06/11 职场文书
公司离职证明标准样本
2014/10/05 职场文书
总经理司机岗位职责
2015/04/10 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python