Python之xml解析

来源:互联网 发布:网络语233333什么意思 编辑:程序博客网 时间:2024/05/18 13:44

expat库

特点

  • 1 支持动态解析xml,意味着expat不一定需要完整的xml也可以进行工作。

应用

  • 1 利用expat的动态解析特点来分解大块的xml数据。

举例

import xml.parsers.expatdef 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 Trueclass expatParser(object):    def __init__(self, xmlRaw):        #定义Expat解析器        self.parser = xml.parsers.expat.ParserCreate()        #expat解析器遇到xml开始元素、元素值和结束元素分别调用startElement,charData,endElement        self.parser.StartElementHandler = self.startElement        self.parser.EndElementHandler = self.endElement        self.parser.CharacterDataHandler = self.charData        self.parser.ParseFile(xmlRaw)        print()    #name:节点名称 attrs:节点属性(字典)    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>