初始化Zeep客户端时收到无效XML内容的问题求助
解决Zeep初始化时XML标签不匹配的XMLSyntaxError问题
问题情况
初始化Zeep客户端的代码如下:
url = 'http://www.filmratings.com/Filmratings_CARA/WebCaraSearch/Service.asmx?wsdl' client = Client(wsdl = url)
运行后出现错误:
XMLSyntaxError: Invalid XML content received (Opening and ending tag mismatch: p line 122 and ul, line 124, column 20)
尝试过相关的Zeep XML错误解决方案但未成功,刚接触Zeep库,不清楚如何修改XML解析器参数来适配这个格式有问题的WSDL。
解决方案
Zeep默认使用严格的XML解析器,遇到格式不规范的WSDL会直接报错。可以通过配置宽松模式的解析器来绕过这个问题,步骤如下:
- 导入所需模块:
from zeep import Client from zeep.wsdl import Parser from lxml import etree
- 创建支持错误恢复的宽松XML解析器:
# 开启恢复模式忽略语法错误,同时禁用实体解析保证安全 lenient_parser = etree.XMLParser( recover=True, resolve_entities=False, encoding='utf-8' )
- 使用自定义解析器初始化Zeep客户端:
方法一:手动解析WSDL后传入
import requests # 获取WSDL内容并用宽松解析器处理 wsdl_content = requests.get(url).content wsdl_tree = etree.fromstring(wsdl_content, parser=lenient_parser) wsdl_parser = Parser(etree.tostring(wsdl_tree)) client = Client(wsdl=wsdl_parser)
方法二:直接将解析器传入Client
client = Client( wsdl=url, parser=Parser(lenient_parser) )
说明
recover=True参数让lxml解析器尝试忽略XML语法错误继续解析,这是针对不规范WSDL的临时 workaround,并非修复WSDL本身的问题。- 如果仍有报错,可以尝试添加更多宽松参数,比如
remove_blank_text=True或strip_cdata=False来进一步放宽解析规则。
内容的提问来源于stack exchange,提问作者Azamat Bagatov
相关产品推荐
相关产品推荐

