使用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生成指定长度的随机数密码
Jan 23 Python
Python学习之asyncore模块用法实例教程
Sep 29 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
分享vim python缩进等一些配置
Jul 02 Python
python 3.3 下载固定链接文件并保存的方法
Dec 18 Python
Python3 assert断言实现原理解析
Mar 02 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 Python
Django一小时写出账号密码管理系统
Apr 29 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&amp;&amp;mysql)二
2006/10/09 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
js验证表单大全
2006/11/25 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
require.js的用法详解
2015/10/20 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python标准库shutil用法实例详解
2018/08/13 Python
Python Subprocess模块原理及实例
2019/08/26 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
什么是规则表达式
2012/05/03 面试题
煤矿安全生产责任书
2014/04/15 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
LeetCode189轮转数组python示例
2022/08/05 Python