python解析返回值类型为xml的数据接口

样参

<?xml version="1.0" encoding="UTF-8"?>

-<root>

<state>success</state>

<result>接口调用成功</result>

<queryCode>ff808081864f14af0</queryCode>


-<head>


-<jbxx>

<column length="200" type="S" nodeName="csmc">测试名称</column>

<column length="18" type="S" nodeName="cscsdm">测试参数代码</column>

<column length="20" type="S" nodeName="cscs">测试测试</column>

<column length="11" type="S" nodeName="cssj">测试数据</column>

</jbxx>


-<sxcjdx>

<column length="32" type="S" nodeName="id">内码</column>

<column length="50" type="S" nodeName="mdlb">名单类别</column>

<column length="4000" type="S" nodeName="lryy">列入原因</column>

<column length="20" type="D" nodeName="qssj">起始时间</column>

<column length="20" type="D" nodeName="yxqz">有效期至</column>


</sxcjdx>

</head>


-<datas>


-<jbxx>

<csmc>**********</csmc>

<cscsdm/>

<cscs/>

<cssj/>

</jbxx>


-<sxcjdx>


-<data>

<id>7087f2822b82556</id>

<mdlb>*****</mdlb>

<lryy>*****</lryy>

<qssj/>

<yxqz/>


</data>


-<data>

<id>7087f2822b82556</id>

<mdlb>*****</mdlb>

<lryy>*****</lryy>

<qssj/>

<yxqz/>


</data>


-<data>

<id>7087f2822b82556</id>

<mdlb>*****</mdlb>

<lryy>*****</lryy>

<qssj/>

<yxqz/>


</data>

</sxcjdx>

</datas>

</root>

接口返回值

代码

# -*- coding: utf-8 -*-
import pandas as pd
import requests
import xml.etree.ElementTree as ET
# 接口请求
def request_data_xml(param, url):
    params = param
    result = requests.get(url, params=params)
    return result.json()
# 解析返回值,去除xml
def get_xml(self, param, url):
	result = self.request_data(url=url, param=param)
	result = json.loads(json.loads(result["data"])["data"])
	result_xml = str(result["result"].replace("\"", "").replace("<?xml version='1.0' encoding='UTF-8'?>", ""))
	# 构造一个ElementTree对象
	tree = ET.fromstring(result_xml)
	return tree
tree= get_xml(param, url)

通过findall,find寻找我们需要的标签获取数据

csmc= tree.findall('datas')[0].find('jbxx').find("csmc").text
cscsdm = tree.findall('datas')[0].find('jbxx').find("cscsdm").text
cscs = tree.findall('datas')[0].find('jbxx').find("cscs").text
cssj= tree.findall('datas')[0].find('jbxx').find("cssj").text
lis = [] # 用来保存data标签内的数据
for obj in tree.find('datas').find('sxjldx').findall("data"):
    lis1 = []
    id = obj.find("id").text
    mdlb = obj.find("mdlb").text
    lryy = obj.find("lryy").text
    qssj = obj.find("qssj").text
    yxqz = obj.find("yxqz").text
    dis = {"id": id, "mdlb": mdlb, "lryy": lryy, "qssj": qssj, "yxqz": yxqz}
    lis.append(dis)
#将列表内的数据转化为dataframe类型
df_temp = pd.DataFrame(lis, index=None)
#与jbxx标签内的数据拼接,得到目标数据
df_temp['csmc'], df_temp['cscsdm'], df_temp['cscs'], df_temp['cssj'] = csmc, cscsdm, cscs, cssj

读取xml

方式一,从文件中读取

# 从.xml文件读取,xml文件路径
xml_path= '../project/xxxx.xml'  
tree = ET.parse(xml_path)

方式二,从字符串中读取

xml='<?xml version="1.0" encoding="UTF-8"?>-<root>...</root>'
tree = ET.fromstring(result_xml)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值