在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件。

  在生成XML文件中,我们主要使用下面的方法来完成。

  主要方法

  1、生成XML节点(node)

  1. createElement("node_name")

  2、给节点添加属性值(Attribute)

  1. node.setAttribute("att_name", "arr_value")

  3、节点的标签值(data)

  1. createTextNode("node_value")

  

  其中第1、3点在创建完节点(节点值)之后,还需使用下面的方法添加到指点的节点的位置下面

  1. prev_node.appendChild(cur_node)

  

这里的prev_node要添加节点的上一层节点,而cur_node即为当前要添加的节点了。

代码演示

下面用代码来演示下如何使用Dom来生成XML,这个是简单版本,如下:

  1. '''
  2. Created on 2012-8-28
  3.  
  4. @author: walfred
  5. @module: domxml.genXML
  6. @description:
  7. '''
  8. import xml.dom.minidom as Dom
  9.  
  10. if __name__ == "__main__":
  11. doc = Dom.Document()
  12. root_node = doc.createElement("book_store")
  13. root_node.setAttribute("name", "newhua")
  14. root_node.setAttribute("website", "http://www.jb51.net")
  15. doc.appendChild(root_node)
  16.  
  17. book_node = doc.createElement("book1")
  18.  
  19. book_name_node = doc.createElement("name")
  20. book_name_value = doc.createTextNode("hamlet")
  21. book_name_node.appendChild(book_name_value)
  22. book_node.appendChild(book_name_node)
  23.  
  24. book_author_node = doc.createElement("author")
  25. book_author_value = doc.createTextNode("William Shakespeare")
  26. book_author_node.appendChild(book_author_value)
  27. book_node.appendChild(book_author_node)
  28.  
  29. root_node.appendChild(book_node)
  30.  
  31. f = open("book_store.xml", "w")
  32. f.write(doc.toprettyxml(indent = "\t", newl = "\n", encoding = "utf-8"))
  33. f.close()

  这个代码将在当前目录下生成一个book_store.xml文件,我把它也贴在下面:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <book_store name="newhua" website="http://www.jb51.net">
  3. <book1>
  4. <name>hamlet</name>
  5. <author>William Shakespeare</author>
  6. </book1>
  7. </book_store>

  当然一旦你掌握了这些基本方法之后,我们可以用一个类来更好的完成,这个类我们称之为XMLGenerator,代码如下:

  1. '''
  2. Created on 2012-8-28
  3.  
  4. @author: walfred
  5. @module: domxml.wXMLbyDom
  6. @description:
  7. '''
  8. import xml.dom.minidom as Dom
  9.  
  10. class XMLGenerator:
  11. def __init__(self, xml_name):
  12. self.doc = Dom.Document()
  13. self.xml_name = xml_name
  14.  
  15. def createNode(self, node_name):
  16. return self.doc.createElement(node_name)
  17.  
  18. def addNode(self, node, prev_node = None):
  19. cur_node = node
  20. if prev_node is not None:
  21. prev_node.appendChild(cur_node)
  22. else:
  23. self.doc.appendChild(cur_node)
  24. return cur_node
  25.  
  26. def setNodeAttr(self, node, att_name, value):
  27. cur_node = node
  28. cur_node.setAttribute(att_name, value)
  29.  
  30. def setNodeValue(self, cur_node, value):
  31. node_data = self.doc.createTextNode(value)
  32. cur_node.appendChild(node_data)
  33.  
  34. def genXml(self):
  35. f = open(self.xml_name, "w")
  36. f.write(self.doc.toprettyxml(indent = "\t", newl = "\n", encoding = "utf-8"))
  37. f.close()
  38.  
  39. if __name__ == "__main__":
  40. myXMLGenerator = XMLGenerator("book_store.xml")
  41.  
  42. #xml root node
  43. node_book_store = myXMLGenerator.createNode("book_store")
  44. myXMLGenerator.setNodeAttr(node_book_store, "name", "new hua")
  45. myXMLGenerator.setNodeAttr(node_book_store, "website", "http://www.jb51.net")
  46. myXMLGenerator.addNode(node = node_book_store)
  47.  
  48. #book01
  49. node_book_01 = myXMLGenerator.createNode("book")
  50.  
  51. node_book_01_name = myXMLGenerator.createNode("name")
  52. myXMLGenerator.setNodeValue(node_book_01_name, "Hamlet")
  53. myXMLGenerator.addNode(node_book_01_name, node_book_01)
  54.  
  55. node_book_01_author = myXMLGenerator.createNode("author")
  56. myXMLGenerator.setNodeValue(node_book_01_author, "William Shakespeare")
  57. myXMLGenerator.addNode(node_book_01_author, node_book_01)
  58.  
  59. node_book_01_price = myXMLGenerator.createNode("price")
  60. myXMLGenerator.setNodeValue(node_book_01_price, "$20")
  61. myXMLGenerator.addNode(node_book_01_price, node_book_01)
  62.  
  63. node_book_01_grade = myXMLGenerator.createNode("grade")
  64. myXMLGenerator.setNodeValue(node_book_01_grade, "good")
  65. myXMLGenerator.addNode(node_book_01_grade, node_book_01)
  66.  
  67. myXMLGenerator.addNode(node_book_01, node_book_store)
  68.  
  69. #book 02
  70. node_book_02 = myXMLGenerator.createNode("book")
  71.  
  72. node_book_02_name = myXMLGenerator.createNode("name")
  73. myXMLGenerator.setNodeValue(node_book_02_name, "shuihu")
  74. myXMLGenerator.addNode(node_book_02_name, node_book_02)
  75.  
  76. node_book_02_author = myXMLGenerator.createNode("author")
  77. myXMLGenerator.setNodeValue(node_book_02_author, "naian shi")
  78. myXMLGenerator.addNode(node_book_02_author, node_book_02)
  79.  
  80. node_book_02_price = myXMLGenerator.createNode("price")
  81. myXMLGenerator.setNodeValue(node_book_02_price, "$200")
  82. myXMLGenerator.addNode(node_book_02_price, node_book_02)
  83.  
  84. node_book_02_grade = myXMLGenerator.createNode("grade")
  85. myXMLGenerator.setNodeValue(node_book_02_grade, "good")
  86. myXMLGenerator.addNode(node_book_02_grade, node_book_02)
  87.  
  88. myXMLGenerator.addNode(node_book_02, node_book_store)
  89.  
  90. #gen
  91. myXMLGenerator.genXml()

  同样这个方法会在本目录下生成一个book_store.xml文件,如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <book_store name="new hua" website="http://www.jb51.net">
  3. <book>
  4. <name>Hamlet</name>
  5. <author>William Shakespeare</author>
  6. <price>$20</price>
  7. <grade>good</grade>
  8. </book>
  9. <book>
  10. <name>shuihu</name>
  11. <author>naian shi</author>
  12. <price>$200</price>
  13. <grade>good</grade>
  14. </book>
  15. </book_store>

  

  

Python中使用dom模块生成XML文件示例的更多相关文章

  1. Java&Xml教程(四)使用DOM方式生成XML文件

    在前面的教程中,我们学习了使用DOM解析方式读取和修改XML文件内容,今天我们来学习如何使用DOM解析机制生成XML文件. 下面是我们对要生成的XML文件的具体要求: 1.根节点元素为"Em ...

  2. Java中使用DOM4J来生成xml文件和解析xml文件

    一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...

  3. javaxml文件基础:Dom怎么生成xml文件

    package CreateXmlByDom; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax. ...

  4. Python 中 使用 HTMLTestRunner 模块生成测试报告

     使用 HTMLTestRunner 模块可以生成测试报告,但是系统自带的报告不详细,不好看,所以找了一份详细的报告 HTMLTestRunner 模板,直接导入就能使用 两种方法生成HTML报告,都 ...

  5. hdf 5文件格式及python中利用h5py模块读写h5文件

    h5文件格式,HDF 的版本 5(HDF 版本 5不与 HDF 版本 4 及早期版本兼容).HDF是什么呢?就是Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件 ...

  6. 使用Pull解析器生成XML文件和读取xml文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  7. Java——DOM方式生成XML (转)

    http://blog.csdn.net/u012325167/article/details/50943202 使用DOM方式生成XML文件有如下几步: 首先是创建DOM树(即规定XML文件中的内容 ...

  8. 使用Pull解析器生成XML文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  9. python中的shutil模块

    目录 python中的shutil模块 目录和文件操作 归档操作 python中的shutil模块 shutil模块对文件和文件集合提供了许多高级操作,特别是提供了支持文件复制和删除的函数. 目录和文 ...

随机推荐

  1. 详解 ES6 Modules

    详解 ES6 Modules 对于新人朋友来说,想要自己去搞定一个ES6开发环境并不是一件容易的事情,因为构建工具的学习本身又是一个非常大的方向,我们需要花费不少的时间才能掌握它. 好在慢慢的开始有大 ...

  2. IntelliJ IDEA2018注册

    第一步:0.0.0.0 account.jetbrains.com及0.0.0.0 www.jetbrains.com  添加到hosts文件 第二步:进入 http://idea.lanyus.co ...

  3. IBatis Map时间参数文字格式不匹配!

    CS. ht.Add("start_time", startTime); Map <isNotNull prepend="and" property=&q ...

  4. [洛谷P2495][SDOI2011]消耗战

    题目大意:有一棵$n(n\leqslant2.5\times10^5)$个节点的带边权的树,$m$个询问,每次询问给出$k(\sum\limits_{i=1}^mk_i\leqslant5\times ...

  5. 2017 ccpc哈尔滨 A题 Palindrome

    2017 ccpc哈尔滨 A题 Palindrome 题意: 给一个串\(T\),计算存在多少子串S满足\(S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)\) 思路: 很明显这里的回文串长 ...

  6. BZOJ2924 [Poi1998]Flat broken lines 【Dilworth定理 + 树状数组】

    题目链接 BZOJ2924 题解 题面有误..是\(45°\) 如果两个点间连线与\(x\)轴夹角在\(45°\)以内,那么它们之间连边 求最小路径覆盖 = 最长反链 由于\(45°\)比较难搞,我们 ...

  7. bzoj4518: [Sdoi2016]征途(DP+决策单调性分治优化)

    题目要求... 化简得... 显然m和sum^2是已知的,那么只要让sigma(si^2)最小,那就变成了求最小平方和的最小值,经典的决策单调性,用分治优化即可. 斜率优化忘得差不多就不写了 #inc ...

  8. jquery实现拖拽进度条并显示百分比

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  9. spring常用管理bean注解

    spring提供了多个注解声明Bean为spring管理的Bean @Controller 声明此类是一个MVC类,通常与@RequestMapping一起使用 @Controller @Reques ...

  10. [USACO06NOV] Corn Fields

    https://www.luogu.org/problem/show?pid=1879 题目描述 Farmer John has purchased a lush new rectangular pa ...