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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
Python中利用sorted()函数排序的简单教程
Apr 27 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python解析含有重复key的json方法
Jan 22 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
基于Python fminunc 的替代方法
Feb 29 Python
pytorch实现线性回归以及多元回归
Apr 11 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 Python
使用Django框架创建项目
Jun 10 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的配置文件php.ini
2006/10/09 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
使用PHP编写的SVN类
2013/07/18 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
ASP中Sub和Function的区别说明
2020/08/30 Javascript
js数组操作学习总结
2013/11/04 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
AngularJS入门之动画
2016/07/27 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Python如何访问字符串中的值
2020/02/09 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
使用Django清空数据库并重新生成
2020/04/03 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
工作违纪检讨书
2014/02/17 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python