python sax流式解析xml文件
注:摘出解析xml两个关键函数
import xml.sax
import xml.sax.handler
class saxHandler(xml.sax.ContentHandler):
def __init__(self):
self.tag=None
self.attribute=[]
def startElement(self, tag, attributes):
self.tag = tag
def characters(self, content):
if self.tag == 'name':
if content != '\n' and content != ' ' and content != ' ':
self.attribute.append(content)
def endElement(self, name):
pass
def getData(filepath):
#创建解析xml文件类的对象
parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces,0)
Handler=saxHandler()
parser.setContentHandler( Handler )
filename=os.listdir()
for file in filename:
if file.find('.xml') != -1:
#解析xml文件
#每次调用时会依次自动调用
#startElement( tag, attributes)(开始解析时自动调用)
#characters ( content)(从行开始,遇到标签之前,存在字符,content的值为这些字符串。从一个标签,遇到下一个标签之前, 存在字符,content的值为这些字符串。从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。标签可以是开始标签,也可以是结束标签)
#endElement(self, name)(结束解析时自动调用)
parser.parse(filepath+file)
bill.data['unitPrice']+=1
#print(f)
b=billing()
Handler.satistics(b)
return b