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 相关文章推荐
linux系统使用python获取cpu信息脚本分享
Jan 15 Python
Python映射拆分操作符用法实例
May 19 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
python使用fork实现守护进程的方法
Nov 16 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
python中的句柄操作的方法示例
Jun 20 Python
Flask框架中request、请求钩子、上下文用法分析
Jul 23 Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 Python
简述python&amp;pytorch 随机种子的实现
Oct 07 Python
Python之Matplotlib绘制热力图和面积图
Apr 13 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
JScript的条件编译
2007/05/29 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python 随机森林算法及其优化详解
2019/07/11 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
焊接专业毕业生求职信
2013/10/01 职场文书
教育专业自荐书范文
2013/12/17 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
国际贸易系求职信
2014/08/09 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
电影开国大典观后感
2015/06/04 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python
Python OpenCV实现图形检测示例详解
2022/04/08 Python
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js