[python]使用xml.dom读写XML文件

我觉得XML可以理解成为一棵多叉树。一个根节点下,可以有多个子节点,子节点又可以看做是一个根节点继续添加子节点。每个节点上面可以有标签(可以理解为节点的一些属性)。当节点为叶子节点的时候,一般存放一串字符串,可以理解为节点的内容。

加载dom库

from xml.dom import minidom

建立节点

#建立整个文本
doc=minidom.Document()

#建立普通节点
acadamic=doc.createElement("acadamic")#节点名称为acadamic

#简历文本节点,也是是最底层节点
#比如   <acadamic>Automation</acadamic>
# "Automation"是acadamic的子节点
doc.createTextNode("Automation")

添加子节点

#给叶子节点添加内容
acadamic.appendChild(doc.createTextNode("Automation"))
#给非叶子节点添加子节点
student1.appendChild(acadamic)

添加标签

#给student这个节点添加一个标签id,值设为01
student1.setAttribute("id","01")

输出xml

f=open("f:/school.xml","w")
doc.writexml(f)
f.close()

 最终生成

<?xml version="1.0" ?> 
- <!-- This is an example!
  --> 
- <studentlist>
- <student id="01">
  <acadamic>Automation</acadamic> 
  <school>UESTC</school> 
  </student>
- <student id="02">
  <acadamic>Communication</acadamic> 
  <school>GDUT</school> 
  </student>
  </studentlist>

 

-----------------------------------------------------------------------------------------------------------

读取XML

打开XML文件

doc = minidom.parse("f:/school.xml")

节点的类型:

#普通节点
Node.ELEMENT_NODE
#备注节点
Node.COMMENT_NODE
#文本节点
Node.TEXT_NODE

#值得注意的是,TEXT_NODE虽然被包围在一个普通节点中间,但它是作为这个普通节点的唯一子节点

读取XML,除了dom以外,还要import Node

from xml.dom import minidom,Node

查看节点的标签、类型与属性与节点的值

#节点类型
if child.nodeType==Node.ELEMENT_NODE

#节点标签
child.tagName=="acadamic"

#节点属性
student_id=child.getAttribute("id")

#节点的值,叶子节点才能直接返回值
if node.nodeType==Node.TEXT_NODE:
            return node.nodeValue

迭代子节点

for child in node.childNodes:
      if child.nodeType==Node.ELEMENT_NODE and child.tagName=="student":
              student_id=child.getAttribute("id")
              print "student id is %s\n" % student_id
              self.read_student(child)

由于最后的文本节点肯定是它的父节点的唯一节点,所以一般不需要迭代,直接使用firstChild

if child.nodeType==Node.ELEMENT_NODE and child.tagName=="school":
              print "school is %s" % self.read_text(child.firstChild)

 

完整代码:https://github.com/iyjhabc/study_examples/blob/master/read_xml.py

posted @ 2013-08-27 17:01  iyjhabc  阅读(1341)  评论(0编辑  收藏  举报