如何使用Zeep在WSDL请求中修复“无效标签名称”?

时间:2019-08-28 15:09:26

标签: wsdl lxml python-3.7 zeep

尝试访问WSDL服务时,出现以下错误:

ValueError: Invalid tag name 'Foo\\Bar\\Baz\\Etc\\V3Port'

通过WSDL链接提供的端口实际上只有一个反斜杠:'Foo \ Bar \ Baz \ Etc \ V3Port'

当zeep调用lxml库中的apihelpers.pxi方法时,会引发ValueError。

有什么主意我可以解决这个问题吗?

(顺便说一句:两个月前我使用脚本时,脚本工作正常。WSDL链接未更改)

2 个答案:

答案 0 :(得分:0)

我找到了解决方法

在此之前,这已经足够:

from zeep import Client

现在,显然,我需要显式添加:

from lxml import etree

一切正常。

答案 1 :(得分:0)

Zeep 也不喜欢值中的“/”。每当它在值中找到它不喜欢的任何字符时,它都会给出无效的标签名称错误。对于所有此类错误,您需要修改位于 zeep 库根文件夹中的 utils.py 中的 as_qname 函数。

就我而言,它抱怨“/”的值,这是一个有效值。我必须在 as_qname 函数中添加以下行。

value = value.replace("/", "-")

下面是修改后的as_qname的前几行

def as_qname(value: str, nsmap, target_namespace=None) -> etree.QName:
    """Convert the given value to a QName"""
    value = value.strip()  # some xsd's contain leading/trailing spaces
    value = value.replace("/", "-")   # Added by me.
    if ":" in value:
        prefix, local = value.split(":")