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爬虫神器Beautiful Soup用法
Jan 20 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
python requests.post带head和body的实例
Jan 02 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
浅谈Django前端后端值传递问题
Jul 15 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 Python
pytorch 梯度NAN异常值的解决方案
Jun 05 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 parse_url 一个好用的函数
2009/10/03 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
php实现socket推送技术的示例
2017/12/20 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
纯文字版返回顶端的js代码
2013/08/01 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
趣味体育活动方案
2014/02/08 职场文书
森林病虫害防治方案
2014/06/02 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
大学运动会通讯稿
2015/07/18 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android