使用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中操作mysql的pymysql模块详解
Sep 13 Python
Python输出带颜色的字符串实例
Oct 10 Python
对python中的for循环和range内置函数详解
Apr 17 Python
Python实现的堆排序算法示例
Apr 29 Python
Sanic框架路由用法实例分析
Jul 16 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
Python任务调度模块APScheduler使用
Apr 15 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 Python
Elasticsearch 聚合查询和排序
Apr 19 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中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
红米手机抢购的js代码
2014/03/10 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
python使用arp欺骗伪造网关的方法
2015/04/24 Python
利用Python爬取可用的代理IP
2016/08/18 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
天游软件面试
2013/11/23 面试题