如何在Python中使用SOAPpy设置XML属性?
我正在创建一个SOAPpy请求,但我不知道怎么在标签里设置属性。下面是我的代码:
url = wsdlfile = 'https://stats2.overture.com/ExternalSOAP/statsPMCAPI_1_0.wsdl'
n = 'urn:yahoo:overture:stats:3.0'
server = WSDL.Proxy(wsdlfile)
server.soapproxy.config.dumpSOAPOut = 1
server.soapproxy.config.dumpSOAPIn = 1
result = server.getAvailablePmcReports(ReportAuth = {'username': username, 'cookie': YBY}, ReportRequest= '')
print(result)
这段代码输出的是:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:getAvailablePmcReports xmlns:ns1="urn:yahoo:overture:stats:3.0" SOAP-ENC:root="1">
<ReportRequest xsi:type="xsd:string"></ReportRequest>
<ReportAuth>
<username xsi:type="xsd:string">myuser</username>
<cookie xsi:type="xsd:string">cookie here...</cookie>
</ReportAuth>
</ns1:getAvailablePmcReports>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但我想要的是这个:
<ReportRequest startRow="0" shownRows="200">
我该怎么添加这些属性呢?谢谢。
1 个回答
3
你可以通过给ReportRequest这个关键词参数传递一个特定类型的值来实现这个功能。例如,如果我把getAvailablePmcReports
这一行改成这样:
from SOAPpy import Types
result = server.getAvailablePmcReports(
ReportAuth = {'username': username, 'cookie': YBY},
ReportRequest= Types.stringType('', attrs={'startRow': 0, 'shownRows': 200}))
那么生成的请求中会包含一个像这样的标签:
<ReportRequest xsi:type="xsd:string" shownRows="200" startRow="0"></ReportRequest>