使用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 可爱的大小写
Sep 06 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
numpy排序与集合运算用法示例
Dec 15 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
pytorch 求网络模型参数实例
Dec 30 Python
pytorch中的transforms模块实例详解
Dec 31 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 Python
如何解决pycharm调试报错的问题
Aug 06 Python
python实现自动清理文件夹旧文件
May 10 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 分页函数multi() discuz
2009/06/21 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python利用IPython提高开发效率
2016/08/10 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
企业统计员岗位职责
2013/12/13 职场文书
军神教学反思
2014/02/04 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
学生实习证明范文
2014/09/28 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript