Python之xml解析

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):
        #定义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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值