You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用zeep解析包含XML消息的文本内容?

zeep返回含XML的文本解析方案

第一步:提取有效XML内容

先从zeep返回的文本中截取完整的XML片段,去掉前后无关的普通文本字符,确保XML的起始标签和结束标签完整匹配。如果XML内容存在<、>这类转义符,先用html.unescape()做转义还原。

import html
# 假设zeep返回的文本保存在result变量中
xml_start = result.find("<")
xml_end = result.rfind(">") + 1
raw_xml = html.unescape(result[xml_start:xml_end])

第二步:选择解析工具

方案1:使用Python标准库xml.etree.ElementTree(无需额外安装依赖)

适合结构简单、没有复杂命名空间的XML场景:

import xml.etree.ElementTree as ET

# 解析XML得到根节点
root = ET.fromstring(raw_xml)
# 基础路径查询,比如提取所有user节点下的name字段
for name_node in root.findall(".//user/name"):
    print(name_node.text)

如果是SOAP场景返回的XML大多带命名空间,需要手动指定命名空间映射再查询:

# 按XML头部定义的命名空间配置映射,示例ns0对应的值以实际返回的XML为准
ns_map = {"ns0": "http://www.example.com/soap-service"}
# 带命名空间查询节点
order_no = root.find(".//ns0:orderNo", ns_map).text

方案2:使用第三方库lxml(适合复杂XML场景)

解析性能更高,支持完整XPath语法,容错性更强,安装命令:pip install lxml
用法和标准库基本一致,仅导入语句不同:

from lxml import etree as ET
root = ET.fromstring(raw_xml)
# 其余查询操作和标准库完全兼容

可选优化:直接使用zeep原生能力处理

如果返回的XML本身是标准SOAP响应结构,不需要手动解析文本,调用时添加_raw_response=True参数即可直接获取结构化结果:

from zeep import Client
client = Client("你的WSDL地址")
# 调用接口时加_raw_response参数
response = client.service.your_method_name(param1=xxx, _raw_response=True)
# 可直接通过zeep的序列化方法转成字典
result_dict = response.__dict__

内容的提问来源于stack exchange,提问作者eri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:48:04