使用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中处理字符串之endswith()方法的使用简介
May 18 Python
python 写入csv乱码问题解决方法
Oct 23 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
Python中的 enum 模块源码详析
Jan 09 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
python自动生成model文件过程详解
Nov 02 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
Python一些基本的图像操作和处理总结
Jun 23 Python
Python图片验证码降噪和8邻域降噪
Aug 30 Python
图神经网络GNN算法
May 11 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
Python 连连看连接算法
2008/11/22 Python
Python自动发邮件脚本
2017/03/31 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
Python 在函数上添加包装器
2020/07/28 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
教师岗位职责
2013/11/17 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
培训班开班主持词
2015/07/02 职场文书
新闻稿标题
2015/07/18 职场文书
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
详解Python内置模块Collections
2022/03/22 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python