xml模块的API接口(执行错误,待更)
1.SAX(Simple API for XML,XML的简单处理API)
通过解析XML的过程中触发的一个个事件并调用用户定义的回调函数来处理XML文件.当文件很大或内存有限制时,可以只读取需要部分内容.
2.DOM(Document Object Model,文档对象模型)
SAX是只读的,DOM允许更改XML文件.
用SAX解析XML文件
import xml.sax
import sys
get_record=[] #全局列表变量,准备接收获取的XML内容
class GetStorehouse(xml.sax.ContentHandler): #自定义获取仓库商品类(事件处理器)
def __init__(self):
self.CurrentData="" #自定义当前元素标签名属性
self.title=""
self.name=""
self.amount=""
self.price="" #自定义商品内容属性
def startElement(self,lable,attributes): #遇到元素标签时触发该函数
self.CurrentData=lable #label为实例对象在解析时传递的标签名
if lable=="goods": #二级子元素的开始标签名比较
category=attributes["category"] #获取元素中属性对应的值
return category #获取元素中属性对应的值
def endElement(self,label):
global get_record #声明全局变量
if self.CurrentData=="title":
get_record.append(self.title)
elif self.CurrentData=="name":
get_record.append(self.name)
elif self.CurrentData == "amount":
get_record.append(self.amount)
elif self.CurrentData == "price":
get_record.append(self.price)
def characters(self,content): #遇到元素里的内容吧值赋给类实例属性
if self.CurrentData=="title": #如果遇到的元素标签是title
self.title=content #把读取的内容赋给title
elif self.CurrentData=="name":
self.title=content
elif self.CurrentData=="amount":
self.title=content
elif self.CurrentData=="price":
self.title=content
#================================================
parser=xml.sax.make_parser() #创建一个解析器的XMLReader对象
parser.setFeature(xml.sax.handler.feature_namespaces,0) #从XML文件解析数据 关闭#从命名空间解析
Handler=GetStorehouse() #建立事件处理器实例
parser.setContentHandler(Handler) #为解析器设置事件处理器实例
parser.parse("storehouse.xml") #正式解析指定XML文件内容
print(get_record) #打印全局列表变量的获取结果