Python 解组错误:对于输入字符串:"&引用;
获取Python 解组错误:对于输入字符串:"&引用;,python,suds,Python,Suds,获取解组错误:对于输入字符串:“”。这可能意味着wsdl无法取消序列化数据。但是我的xml格式很好。为什么wsdl服务会被这个xml阻塞 我正在使用Suds+python。 以下是soap服务的wsdl: <xs:element name="parameters"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0"
解组错误:对于输入字符串:“”
。这可能意味着wsdl无法取消序列化数据。但是我的xml格式很好。为什么wsdl服务会被这个xml阻塞
我正在使用Suds+python。
以下是soap服务的wsdl:
<xs:element name="parameters">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="entry">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="key" type="xs:string"/>
<xs:element minOccurs="0" name="value" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
由suds创建的XML消息:
<query>
<parameters>
<entry>
<key>*:*</key>
<value>*:*</value>
</entry>
</parameters>
</query>
*:*
*:*
我继续收到
解组错误
。这是因为suds没有将xsi:type=“ns0:string”
添加到键和值中吗?如果是,那么如何添加它?我用这个概念解决了这个问题
通过这种方式,您可以根据您作为条目传递的键进行控制,您可以正确设置类型。您将问题标记为Python,但没有给出任何正在使用的Python代码。这可能有助于解决您的问题。@michael mior添加了Python代码和错误。Jerry,除非您在问题中加入可测试的代码,否则恐怕无法给您提供适当的反馈。你发布的代码可能真的是任何东西。没有关于您正在使用什么libs的指示,也没有关于什么对象是什么的提示,等等……我从错误消息中推测您正在使用什么。@mac我已经更新了我的问题以使其更清楚。添加了wsdl定义、python代码和生成的xml消息。
<query>
<parameters>
<entry>
<key>*:*</key>
<value>*:*</value>
</entry>
</parameters>
</query>
from suds.client import Client
from suds.plugin import MessagePlugin
class AnyTypePlugin(MessagePlugin):
mapping = {
'id': 'xsd:int',
'title': 'xsd:string',
}
def marshalled(self, context):
modified = False
body = context.envelope.getChild('Body')
query = body.getChild("query")
if query:
params = query.getChild("parameters")
if params:
entries = params.getChildren("entry")
if entries:
for entry in entries:
key = entry.getChild("key").getText()
if key in self.mapping:
attr = Attribute('xsi:type', self.mapping[key])
entry.getChild("value").append(attr)
modified = True
if modified:
xsd_attr = Attribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema')
context.envelope.append(xsd_attr)
url = "some wsdl url"
client = Client(url, plugins=[AnyTypePlugin()])