使用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通过索引遍历列表的方法
May 04 Python
Python使用minidom读写xml的方法
Jun 03 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
Django添加sitemap的方法示例
Aug 06 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
Python读写Excel表格的方法
Mar 02 Python
numpy实现RNN原理实现
Mar 02 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字符串截取的简单方法
2013/07/04 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php猜单词游戏
2015/09/29 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
用Python写一个无界面的2048小游戏
2016/05/24 Python
python生成随机红包的实例写法
2019/09/02 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
如何理解python中数字列表
2020/05/29 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
python自动生成sql语句的脚本
2021/02/24 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
彪马日本官网:PUMA日本
2019/01/31 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
信电学院毕业生自荐书
2014/05/24 职场文书
计划生育工作汇报
2014/10/28 职场文书
房屋所有权证明
2015/06/19 职场文书
拿破仑传读书笔记
2015/07/01 职场文书