使用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 相关文章推荐
在Django的form中使用CSS进行设计的方法
Jul 18 Python
深入解析Python的Tornado框架中内置的模板引擎
Jul 11 Python
老生常谈python函数参数的区别(必看篇)
May 29 Python
python 全局变量的import机制介绍
Sep 07 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python变量的存储原理详解
Jul 10 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
Python实现不规则图形填充的思路
Feb 02 Python
django修改models重建数据库的操作
Mar 31 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
用python计算文件的MD5值
Dec 23 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 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
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
JS实现拼图游戏
2021/01/29 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
css3学习心得分享
2013/08/19 HTML / CSS
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
业务员岗位职责
2015/02/03 职场文书
董事长致辞
2015/07/29 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs