使用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调用shell的方法
Nov 20 Python
Python中pygame安装方法图文详解
Nov 11 Python
多版本Python共存的配置方法
May 22 Python
Python文件操作基本流程代码实例
Dec 11 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
详解Python是如何实现issubclass的
Jul 24 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
浅谈Python中的模块
Jun 10 Python
python从ftp获取文件并下载到本地
Dec 05 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
Python 正则表达式操作指南
2009/05/04 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
python读取Kafka实例
2019/12/23 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python中字符串的编码与解码详析
2020/12/03 Python
python wsgiref源码解析
2021/02/06 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
水务局局长岗位职责
2013/11/28 职场文书
法定代表人授权委托书
2014/09/19 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
专家推荐信范文
2015/03/26 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
学前教育见习总结
2015/06/23 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
党性修养心得体会2016
2016/01/21 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP