Python中使用dom模块生成XML文件示例
在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", "http://www.jb51.net")
- 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="http://www.jb51.net">
- <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", "http://www.jb51.net")
- 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="http://www.jb51.net">
- <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中使用dom模块生成XML文件示例的更多相关文章
- Java&Xml教程(四)使用DOM方式生成XML文件
在前面的教程中,我们学习了使用DOM解析方式读取和修改XML文件内容,今天我们来学习如何使用DOM解析机制生成XML文件. 下面是我们对要生成的XML文件的具体要求: 1.根节点元素为"Em ...
- Java中使用DOM4J来生成xml文件和解析xml文件
一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...
- javaxml文件基础:Dom怎么生成xml文件
package CreateXmlByDom; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax. ...
- Python 中 使用 HTMLTestRunner 模块生成测试报告
使用 HTMLTestRunner 模块可以生成测试报告,但是系统自带的报告不详细,不好看,所以找了一份详细的报告 HTMLTestRunner 模板,直接导入就能使用 两种方法生成HTML报告,都 ...
- hdf 5文件格式及python中利用h5py模块读写h5文件
h5文件格式,HDF 的版本 5(HDF 版本 5不与 HDF 版本 4 及早期版本兼容).HDF是什么呢?就是Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件 ...
- 使用Pull解析器生成XML文件和读取xml文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- Java——DOM方式生成XML (转)
http://blog.csdn.net/u012325167/article/details/50943202 使用DOM方式生成XML文件有如下几步: 首先是创建DOM树(即规定XML文件中的内容 ...
- 使用Pull解析器生成XML文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- python中的shutil模块
目录 python中的shutil模块 目录和文件操作 归档操作 python中的shutil模块 shutil模块对文件和文件集合提供了许多高级操作,特别是提供了支持文件复制和删除的函数. 目录和文 ...
随机推荐
- 详解 ES6 Modules
详解 ES6 Modules 对于新人朋友来说,想要自己去搞定一个ES6开发环境并不是一件容易的事情,因为构建工具的学习本身又是一个非常大的方向,我们需要花费不少的时间才能掌握它. 好在慢慢的开始有大 ...
- IntelliJ IDEA2018注册
第一步:0.0.0.0 account.jetbrains.com及0.0.0.0 www.jetbrains.com 添加到hosts文件 第二步:进入 http://idea.lanyus.co ...
- IBatis Map时间参数文字格式不匹配!
CS. ht.Add("start_time", startTime); Map <isNotNull prepend="and" property=&q ...
- [洛谷P2495][SDOI2011]消耗战
题目大意:有一棵$n(n\leqslant2.5\times10^5)$个节点的带边权的树,$m$个询问,每次询问给出$k(\sum\limits_{i=1}^mk_i\leqslant5\times ...
- 2017 ccpc哈尔滨 A题 Palindrome
2017 ccpc哈尔滨 A题 Palindrome 题意: 给一个串\(T\),计算存在多少子串S满足\(S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)\) 思路: 很明显这里的回文串长 ...
- BZOJ2924 [Poi1998]Flat broken lines 【Dilworth定理 + 树状数组】
题目链接 BZOJ2924 题解 题面有误..是\(45°\) 如果两个点间连线与\(x\)轴夹角在\(45°\)以内,那么它们之间连边 求最小路径覆盖 = 最长反链 由于\(45°\)比较难搞,我们 ...
- bzoj4518: [Sdoi2016]征途(DP+决策单调性分治优化)
题目要求... 化简得... 显然m和sum^2是已知的,那么只要让sigma(si^2)最小,那就变成了求最小平方和的最小值,经典的决策单调性,用分治优化即可. 斜率优化忘得差不多就不写了 #inc ...
- jquery实现拖拽进度条并显示百分比
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- spring常用管理bean注解
spring提供了多个注解声明Bean为spring管理的Bean @Controller 声明此类是一个MVC类,通常与@RequestMapping一起使用 @Controller @Reques ...
- [USACO06NOV] Corn Fields
https://www.luogu.org/problem/show?pid=1879 题目描述 Farmer John has purchased a lush new rectangular pa ...