| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jphp
10年前发布

使用python3.4解析xml文件(sax、dom、etree)

调用sax模块处理xml文件。

#重载了三个方法  #处理xml,主要就是写自己的事件处理类    from xml.sax import *    class DengHandler(ContentHandler):      def startDocument(self):          print("----开始解析xml文档----")      def endDocument(self):          print("----xml文档解析完毕----")      def startElement(self,name,attrs):          if name == "author":              print("名字:",attrs['name']," 日期:",attrs["birth"])    parse("deng.xml",DengHandler())          



deng.xml


<?xml version = "1.0" encoding = "utf-8"?>   <author name = "dengjingdong" birth = "19920517"></author>  </people>



调用dom模块中的minidom处理xml文件。


from xml.dom.minidom import *  #scannode函数打印xml文件的结构  def scannode(doc,level = 0):      ret = doc.__class__.__name__      if doc.nodeType == Node.ELEMENT_NODE:          ret += ",标签:" + doc.tagName      print(" "*4*level,ret)      if doc.hasChildNodes:          for child in doc.childNodes:              scannode(child,level+1)  #----scannode-----  xin = parse("book.xml")  print(xin)  scannode(xin)  #----scannode-----    x = parse("domtest.xml")  nx = x.getElementsByTagName("author")    print(nx[0].getAttribute("birth"))  print(nx[0].childNodes[0].data)    print(nx[1].getAttribute("birth"))  print(nx[1].childNodes[0].data)



book.xml


<?xml version = "1.0" encoding = "utf-8" ?>  <book>   <title>the book title</title>   <author>    <name>jingdong</name>    <boy>true</boy>   </author>   <chapter number = "1">    <title> first chapter </title>    <para>     I love python.    </para>   </chapter>  </book>

domtest.xml



<?xml version = "1.0" encoding = "utf-8" ?>  <people>   <author name = "dengjingdong" birth = "1990517">dongdong</author>   <author name = "wushengnan" birth = "19920520">nannan</author>  </people>



调用etree模块中的ElementTree生成所需的xml文件。


import xml.etree.ElementTree as et  x = et.Element("name")  x.text = "dengjingdong"  x.set("boy","true")  sx = et.tostring(x)  print(sx)