Python中使用dom模块生成XML文件示例


Posted in Python onApril 05, 2015

在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件。

在生成XML文件中,我们主要使用下面的方法来完成。

主要方法

1、生成XML节点(node)

createElement("node_name")

2、给节点添加属性值(Attribute)
node.setAttribute("att_name", "arr_value")

3、节点的标签值(data)
createTextNode("node_value")

其中第1、3点在创建完节点(节点值)之后,还需使用下面的方法添加到指点的节点的位置下面:
prev_node.appendChild(cur_node)

这里的prev_node要添加节点的上一层节点,而cur_node即为当前要添加的节点了。

代码演示

下面用代码来演示下如何使用Dom来生成XML,这个是简单版本,如下:

'''

Created on 2012-8-28  

 

@author:  walfred 

@module: domxml.genXML  

@description: 

'''  

import xml.dom.minidom as Dom  

 

if __name__ == "__main__":  

    doc = Dom.Document()  

    root_node = doc.createElement("book_store")  

    root_node.setAttribute("name", "newhua")  

    root_node.setAttribute("website", "https://3water.com")  

    doc.appendChild(root_node)  

 

    book_node = doc.createElement("book1")  

 

    book_name_node = doc.createElement("name")  

    book_name_value = doc.createTextNode("hamlet")  

    book_name_node.appendChild(book_name_value)  

    book_node.appendChild(book_name_node)  

 

    book_author_node = doc.createElement("author")  

    book_author_value = doc.createTextNode("William Shakespeare")  

    book_author_node.appendChild(book_author_value)  

    book_node.appendChild(book_author_node)  

 

    root_node.appendChild(book_node)  

 

    f = open("book_store.xml", "w")  

    f.write(doc.toprettyxml(indent = "\t", newl = "\n", encoding = "utf-8"))  

    f.close()

这个代码将在当前目录下生成一个book_store.xml文件,我把它也贴在下面:

<?xml version="1.0" encoding="utf-8"?>  

<book_store name="newhua" website="https://3water.com">  

    <book1>  

        <name>hamlet</name>  

        <author>William Shakespeare</author>  

    </book1>  

</book_store>

当然一旦你掌握了这些基本方法之后,我们可以用一个类来更好的完成,这个类我们称之为XMLGenerator,代码如下:

''' 

Created on 2012-8-28  

 

@author:  walfred 

@module: domxml.wXMLbyDom  

@description: 

'''  

import xml.dom.minidom as Dom  

 

class XMLGenerator:  

    def __init__(self, xml_name):  

        self.doc = Dom.Document()  

        self.xml_name = xml_name  

 

    def createNode(self, node_name):  

        return self.doc.createElement(node_name)  

 

    def addNode(self, node, prev_node = None):  

        cur_node = node  

        if prev_node is not None:  

            prev_node.appendChild(cur_node)  

        else:  

            self.doc.appendChild(cur_node)  

        return cur_node  

 

    def setNodeAttr(self, node, att_name, value):  

        cur_node = node  

        cur_node.setAttribute(att_name, value)  

 

    def setNodeValue(self, cur_node, value):  

        node_data = self.doc.createTextNode(value)  

        cur_node.appendChild(node_data)  

 

    def genXml(self):  

        f = open(self.xml_name, "w")  

        f.write(self.doc.toprettyxml(indent = "\t", newl = "\n", encoding = "utf-8"))  

        f.close()  

 

if __name__ == "__main__":  

    myXMLGenerator = XMLGenerator("book_store.xml")  

 

    #xml root node  

    node_book_store = myXMLGenerator.createNode("book_store")  

    myXMLGenerator.setNodeAttr(node_book_store, "name", "new hua")  

    myXMLGenerator.setNodeAttr(node_book_store, "website", "https://3water.com")  

    myXMLGenerator.addNode(node = node_book_store)  

 

    #book01  

    node_book_01 = myXMLGenerator.createNode("book")  

 

    node_book_01_name = myXMLGenerator.createNode("name")  

    myXMLGenerator.setNodeValue(node_book_01_name, "Hamlet")  

    myXMLGenerator.addNode(node_book_01_name, node_book_01)  

 

    node_book_01_author = myXMLGenerator.createNode("author")  

    myXMLGenerator.setNodeValue(node_book_01_author, "William Shakespeare")  

    myXMLGenerator.addNode(node_book_01_author, node_book_01)  

 

    node_book_01_price = myXMLGenerator.createNode("price")  

    myXMLGenerator.setNodeValue(node_book_01_price, "$20")  

    myXMLGenerator.addNode(node_book_01_price, node_book_01)  

 

    node_book_01_grade = myXMLGenerator.createNode("grade")  

    myXMLGenerator.setNodeValue(node_book_01_grade, "good")  

    myXMLGenerator.addNode(node_book_01_grade, node_book_01)  

 

    myXMLGenerator.addNode(node_book_01, node_book_store)  

 

    #book 02  

    node_book_02 = myXMLGenerator.createNode("book")  

 

    node_book_02_name = myXMLGenerator.createNode("name")  

    myXMLGenerator.setNodeValue(node_book_02_name, "shuihu")  

    myXMLGenerator.addNode(node_book_02_name, node_book_02)  

 

    node_book_02_author = myXMLGenerator.createNode("author")  

    myXMLGenerator.setNodeValue(node_book_02_author, "naian shi")  

    myXMLGenerator.addNode(node_book_02_author, node_book_02)  

 

    node_book_02_price = myXMLGenerator.createNode("price")  

    myXMLGenerator.setNodeValue(node_book_02_price, "$200")  

    myXMLGenerator.addNode(node_book_02_price, node_book_02)  

 

    node_book_02_grade = myXMLGenerator.createNode("grade")  

    myXMLGenerator.setNodeValue(node_book_02_grade, "good")  

    myXMLGenerator.addNode(node_book_02_grade, node_book_02)  

 

    myXMLGenerator.addNode(node_book_02, node_book_store)  

 

    #gen  

    myXMLGenerator.genXml()

同样这个方法会在本目录下生成一个book_store.xml文件,如下:

<?xml version="1.0" encoding="utf-8"?>  

<book_store name="new hua" website="https://3water.com">  

    <book>  

        <name>Hamlet</name>  

        <author>William Shakespeare</author>  

        <price>$20</price>  

        <grade>good</grade>  

    </book>  

    <book>  

        <name>shuihu</name>  

        <author>naian shi</author>  

        <price>$200</price>  

        <grade>good</grade>  

    </book>  

</book_store>

这个版本算一个稍微高级的版本,但由于时间有限还很显得粗糙,读者可以发挥出更好的。
Python 相关文章推荐
Python编程之Re模块下的函数介绍
Oct 28 Python
python使用pycharm环境调用opencv库
Feb 11 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
python 字符串追加实例
Jul 20 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
python tornado使用流生成图片的例子
Nov 18 Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
用python写一个带有gui界面的密码生成器
Nov 06 Python
python温度转换华氏温度实现代码
Dec 06 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 Python
Python中比较特别的除法运算和幂运算介绍
Apr 05 #Python
Python中使用logging模块打印log日志详解
Apr 05 #Python
Python中的两个内置模块介绍
Apr 05 #Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 #Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 #Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 #Python
Python中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 #Python
You might like
php通过COM类调用组件的实现代码
2012/01/11 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
Python中多线程及程序锁浅析
2015/01/21 Python
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
python实现感知器算法(批处理)
2019/01/18 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
大一学生假期实习的自我评价
2013/10/12 职场文书
外贸主管求职简历的自我评价
2013/10/23 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
Python中的tkinter库简单案例详解
2022/01/22 Python