expat库
特点
- 1 支持动态解析xml,意味着expat不一定需要完整的xml也可以进行工作。
应用
- 1 利用expat的动态解析特点来分解大块的xml数据。
举例
import xml.parsers.expat
def check_attr(attrs, check, where):
for data in check:
if not data in attrs:
print("Missing %s attribute [%s] at %u" % (data, attrs, where))
return False
return True
class expatParser(object):
def __init__(self, xmlRaw):
self.parser = xml.parsers.expat.ParserCreate()
self.parser.StartElementHandler = self.startElement
self.parser.EndElementHandler = self.endElement
self.parser.CharacterDataHandler = self.charData
self.parser.ParseFile(xmlRaw)
print()
def startElement(self, name, attrs):
print("start : " + name)
if check_attr(attrs, ['name'], 0):
print("name : {0}".format(attrs["name"]))
if check_attr(attrs, ['value'], 0):
print("value : {0}".format(attrs["value"]))
def endElement(self, name):
print("end : " + name)
def charData(self, data):
print("Data : {0}".format(data))
f = open("expatParserTest.xml", 'rb')
test = expatParser(f)
f.close()
<enum name="MAV_CMD">
<entry name="MAV_CMD_DO_GRIPPER" value="211">
<description>Mission command to operate EPM gripper</description>
<param value="1">gripper number (a number from 1 to max number of grippers on the vehicle)</param>
<param value="2">gripper action (0=release, 1=grab. See GRIPPER_ACTIONS enum)</param>
<param value="3">Empty</param>
<param value="4">Empty</param>
<param value="5">Empty</param>
<param value="6">Empty</param>
<param value="7">Empty</param>
</entry>
</enum>