TL;博士
Zeep 使用lxml来解析 wsdl。以点开头的绑定名称似乎不严格符合 XML。如果您无法更改绑定名称,您可以通过按照为https://github.com/mvantellingen/python-zeep/issues/594lib\site-packages\zeep\utils.py
所做的内容进行编辑来解决此问题
例如:
...
def qname_attr(node, attr_name, target_namespace=None):
value = node.get(attr_name)
if value is not None:
return as_qname(value, node.nsmap, target_namespace)
def as_qname(value, nsmap, target_namespace=None):
"""Convert the given value to a QName"""
value = value.strip() # some xsd's contain leading/trailing spaces
#KLUDGE for bindingnames that start with '.'
if value.startswith('.'):
print("Stripping leading '.' from:", value)
value = value.lstrip('.')
if ':' in value:
prefix, local = value.split(':')
...
请注意,这可能会产生意想不到的副作用;这对我有用,但我没有做太多测试,YMMV。您可以通过测试特定子字符串的值来使其更具选择性,或者也可以更改qname_attr
并测试“名称”的attr_name。
更详细一点
我最近遇到了类似的东西,其绑定名称中包含“/”。
我对 SOAP 和/或 XML 知之甚少,但据我所知,绑定名称是一个QName,它由一个可选前缀和一个localpart(由 : 分隔)组成。前缀和 localpart 是NCNames;NCName是没有“:”的XML名称;Name是一个Nmtoken ,具有一组受限的初始字符,包括句号(点)。
我不确定这些 w3.org 参考是否是最新的,但它们是我搜索时出现的参考:
https://www.w3.org/TR/wsdl20/#component-Binding
Binding组件的属性如下:
{name} REQUIRED. An xs:QName
...
https://www.w3.org/TR/xml-names/#ns-qualnames
Qualified Names
In XML documents conforming to this specification, some names (constructs corresponding
to the nonterminal Name) MUST be given as qualified names, defined as follows:
Qualified Name
[7] QName ::= PrefixedName | UnprefixedName
[8] PrefixedName ::= Prefix ':' LocalPart
[9] UnprefixedName ::= LocalPart
[10] Prefix ::= NCName
[11] LocalPart ::= NCName
https://www.w3.org/TR/xml-names/#NT-NCName
[4] NCName ::= Name - (Char* ':' Char*) /* An XML Name, minus the ":" */
https://www.w3.org/TR/REC-xml/#NT-Name
名称是具有一组受限初始字符的 Nmtoken。] 名称中不允许使用的初始字符包括数字、变音符号、句号和连字符。
什么是 xs:NCName 类型以及何时应该使用它?
NCName 的实际限制 NCName 的实际限制是它不能包含多个符号字符,如:、@、$、%、&、/、+、、、;、空白字符或不同的括号。此外,NCName 不能以数字、点或减号字符开头,尽管它们可以稍后出现在 NCName 中。