如何使用Python解析API返回的XML响应并提取指定数据?
解决XML响应解析错误并提取目标数据
你遇到的JSONDecodeError原因很直接:你试图用JSON解析器处理XML格式的响应,两种格式完全不兼容,自然会报错。下面提供两种Python解析XML的方案,帮你提取deviceName、softwareVersion、udiSerialNr等数据:
方案一:使用Python标准库解析XML
无需额外安装依赖,直接用Python自带的xml.etree.ElementTree库处理:
import xml.etree.ElementTree as ET if response.status_code == 200: # 获取XML格式的响应文本 xml_content = response.text # 解析XML内容 root = ET.fromstring(xml_content) # 定位到ethernetSummaryDTO节点 eth_summary_node = root.find('ethernetSummaryDTO') # 提取目标数据 device_name = eth_summary_node.find('deviceName').text software_version = eth_summary_node.find('softwareVersion').text udi_serial_nr = eth_summary_node.find('udiDetails/udiSerialNr').text # 打印或使用数据 print(f"设备名称: {device_name}") print(f"软件版本: {software_version}") print(f"UDI序列号: {udi_serial_nr}")
方案二:将XML转为字典(贴近JSON操作习惯)
如果更习惯像操作JSON一样处理数据,可以用xmltodict库把XML转换成字典:
- 先安装依赖:
pip install xmltodict
- 编写解析代码:
import xmltodict if response.status_code == 200: xml_content = response.text # 将XML转为普通字典 resp_dict = xmltodict.parse(xml_content, dict_constructor=dict) # 按层级提取数据,逻辑和你原来操作JSON类似 eth_summary = resp_dict['mgmtResponse']['ethernetSummaryDTO'] device_name = eth_summary['deviceName'] software_version = eth_summary['softwareVersion'] udi_serial_nr = eth_summary['udiDetails']['udiSerialNr'] print(f"设备名称: {device_name}") print(f"软件版本: {software_version}") print(f"UDI序列号: {udi_serial_nr}")
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

