四、python解析xml数据

先创建data.xml文件,用于存储接口数据,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<impldata>
    <login impl="/user/login">
        <data name="username">codeali</data>
        <data name="password">123456</data>
        <data name="expectres">succeed</data>
    </login>

    <devadd impl="/device/add">
        <data name="deviceid">1380001246</data>
        <data name="expectres">succeed</data>
    </devadd>
</impldata>

 创建dataparse.py文件,内容如下:

import logging
import collections
from xml.dom.minidom import parse
from lib import pathdeal
from lib import log

def getDataFromXml(xmlFileName, tagname):
    '''读取测试数据,并进行解析,以有序字典形式返回'''

    log.initLogging('logs')
    dicData = collections.OrderedDict()

    if xmlFileName.endswith('.xml'):
        xmlFile = pathdeal.getSpecialFile(xmlFileName)
        if(xmlFile):
            DOMTree = parse(xmlFile)        #得到整个DOM文档树
            root = DOMTree.documentElement  #得到根节点
            impltag = root.getElementsByTagName(tagname)    #获取标签,返回list
            sub_elements = impltag[0].getElementsByTagName("data")  #只取第一个tag的子元素,重复tag无效
            if(len(sub_elements) > 0):
                for i in range(len(sub_elements)):
                    try:
                        key = sub_elements[i].getAttribute("name")
                        value = sub_elements[i].firstChild.data
                    except AttributeError:
                        value = ""
                    dicData[key] = value
                return dicData
        else:
            logging.info('Not found the data file')
            return False
    else:
        logging.info('The data file is not xml format')
        return False

if __name__ == '__main__':
    print(getDataFromXml('data.xml', 'login'))

执行结果如下:

 

 说明:

1. 每个接口的数据放在一个标签内,一个接口数据一个标签名,便于维护,标签名最好不要重复,阿狸只取了第一个标签的子元素,没考虑标签名重复的情况。

2. 根据xml文件名和接口标签名进行数据解析,将解析到的数据以有序字典形式返回。

3. 标签内,name="expectres",用于结果断言,并非是接口请求参数数据。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值