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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
python轻松实现代码编码格式转换
Mar 26 Python
Python 模拟员工信息数据库操作的实例
Oct 23 Python
python实现excel读写数据
Mar 02 Python
python模拟表单提交登录图书馆
Apr 27 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 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
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
js制作提示框插件
2020/12/24 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
python类的继承实例详解
2017/03/30 Python
python去除字符串中的换行符
2017/10/11 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
一年级小学生评语
2014/04/22 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
会员活动策划方案
2014/08/19 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
立案决定书范文
2015/06/24 职场文书
高三英语教学反思
2016/03/03 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript