我是一个GO新手,开始学习如何处理SOAP请求。我在命名空间方面遇到了困难:我不知道如何构造结构以反映来自Web服务的这类数据以便解组它。你能给我一些提示吗?我使用的是GO 1.5.1
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://webapi.allegro.pl/service.php">
<SOAP-ENV:Body>
<ns1:doQueryAllSysStatusResponse>
<ns1:sysCountryStatus>
<ns1:item>
<ns1:countryId>1</ns1:countryId>
<ns1:programVersion>1.0</ns1:programVersion>
<ns1:catsVersion>1.1.87</ns1:catsVersion>
<ns1:apiVersion>1.0</ns1:apiVersion>
<ns1:attribVersion>1.0</ns1:attribVersion>
<ns1:formSellVersion>1.4.46</ns1:formSellVersion>
<ns1:siteVersion>1.0</ns1:siteVersion>
<ns1:verKey>123131231</ns1:verKey>
</ns1:item>
<ns1:item>
<ns1:countryId>56</ns1:countryId>
<ns1:programVersion>1.0</ns1:programVersion>
<ns1:catsVersion>1.0.43</ns1:catsVersion>
<ns1:apiVersion>1.0</ns1:apiVersion>
<ns1:attribVersion>1.0</ns1:attribVersion>
<ns1:formSellVersion>1.0.69</ns1:formSellVersion>
<ns1:siteVersion>1.0</ns1:siteVersion>
<ns1:verKey>00000101</ns1:verKey>
</ns1:item>
</ns1:sysCountryStatus>
</ns1:doQueryAllSysStatusResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
答案 0 :(得分:1)
您可以使用与SOAP数据匹配的结构,然后使用&#34; encoding / xml&#34;解组它。封装
结构:
type Envelope struct {
XMLName xml.Name `xml:"SOAP-ENV:Envelope"`
Body Body `xml:"SOAP-ENV:Body"`
}
type Body struct {
StatusRes *DoQueryAllSysStatusResponse `xml:"ns1:doQueryAllSysStatusResponse"`
}
type DoQueryAllSysStatusResponse struct {
CountryStatus *SysCountryStatus `xml:"ns1:sysCountryStatus"`
}
// ...
解组:
data := []byte{} // SOAP data
env := &Envelope{}
err := xml.Unmarshal(data, env)
if err != nil {
// do something
}