python使用 xml.sax解析xml



Python代码   收藏代码
  1. #coding=utf-8  
  2. #XML处理  
  3. #SAX处理XML的方式和Java中的SAX解析器一样,从ContentHandler方法中继承,并处理startDocument、endDocument等信息  
  4. from xml.sax import *  
  5. #必须从xml.sax包中导入所有方法和变量  
  6. class UserDecodeHandler(ContentHandler):  
  7. #与Java的SAXParser基本一致,处理方法一样  
  8.     users=None  
  9.     map=None  
  10.     temp=""  
  11.     currenttag=None  
  12.     user=None  
  13.     #注意Python的特殊格式,必须有self作为第一个参数  
  14.     def startDocument(self):  
  15.         print "start xml document"  
  16.           
  17.     def endDocument(self):  
  18.         print "end xml document"  
  19.     #name=当前处理的标签名,attrs以dict的格式存放标签的所有属性  
  20.     def startElement(self,name,attrs):  
  21.         if name=="users":  
  22.             self.users=[]  
  23.         elif name=="user":  
  24.             self.user={"name":attrs['name']}  
  25.         self.currenttag=name  
  26.       
  27.     def endElement(self,name):  
  28.         if name=="user":  
  29.             self.users.append(self.user)  
  30.         elif name=="description":  
  31.             self.user.update({"description":self.temp.strip()})  
  32.             self.temp=""  
  33.         self.currenttag=None  
  34.     #content表示正在处理中的数据    
  35.     def characters(self,content):  
  36.         self.temp+=content  
  37.           
  38. #调用make_parser方法创建一个SAX解析器  
  39. # '''  
  40. print "===============SAX方式解析XML文档==================="  
  41. parser=make_parser()  
  42. handler=UserDecodeHandler()  
  43. parser.setContentHandler(handler)  
  44. data=""  
  45. with open("xmldata.xml") as file:  
  46.     data=file.read().strip()  
  47. import StringIO  
  48. #StringIO模块用于将字符串转换成流数据,类似于Java的ByteArrayOutputStream和ByteArrayInputStream  
  49. parser.parse(StringIO.StringIO(data))  
  50.   
  51. for item in handler.users:  
  52.     print "======================="  
  53.     for i in item.items():  
  54.         key,value=i  
  55.         print key,value.encode("gbk")  
  56. #'''  

 处理的xml内容如下,Python对XML的格式要求不那么严格,不要求必须有xml的DTD说明

 

Xml代码   收藏代码
  1. <users>  
  2.     <user name="zhang">  
  3.         <description>测试  
  4.         数据  
  5.         </description>  
  6.     </user>  
  7.     <user name="wang">  
  8.         <description>测试数据</description>  
  9.     </user>  
  10. </users> 

你可能感兴趣的:(python使用 xml.sax解析xml)