亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確構建和嵌套結構以在 Go 中取消處理 SOAP 響應?

如何正確構建和嵌套結構以在 Go 中取消處理 SOAP 響應?

Go
神不在的星期二 2022-08-09 16:46:17
我在 Go 中取消編組 SOAP 響應時遇到問題。(代碼和摘錄如下。encoding/xml我用于初始化結構字段的值是否錯誤?(例如,xml:"xmlns:soap,attr")我一直在學習的博客文章中的大多數示例都不使用帶有前綴的XML字段,例如.所以我不完全理解如何用這個包來解析它們。<soap:Body>我的結構嵌套不當嗎?我是否需要為每個元素和屬性提供結構和字段才能正確填充結構?xml.Unmarshal例如,如果我不為 或 提供結構字段,會忽略這些元素的內容嗎?或者,我可以僅為要取消元帥的元素提供結構和字段(例如,僅為結構中表示的元素)提供結構和字段?<soap:Envelope><soap:Body>xml.UnmarshalResData我在這里可能錯過了一些明顯的東西,因為我對Go和SOAP都很陌生。我不完全理解是如何工作的,即使在閱讀了幾篇博客文章之后,也展示了如何使用它的示例,并閱讀了一些Go文檔。我可能只是密集。encoding/xml以下是 Go Playground 中的完整測試代碼。當我運行它時,我什么也沒得到:[~/d/xml]% ./xmltestUrl:Name:Protocol:Version:Id:這是我試圖取消元帥的SOAP響應:<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">    <soap:Body>      <GetCompanyWsdkUrlResponse xmlns="http://corrigo.com/integration/">         <GetCompanyWsdkUrlResult xsi:type="GetCompanyWsdkUrlResult">            <Url>https://am-ce96e.corrigo.com/wsdk/CorrigoService.asmx?wsdl</Url>            <CompanyName>ACME Test Company</CompanyName>            <Protocol>HTTPS</Protocol>            <CompanyVersion>9.6</CompanyVersion>            <CompanyId>1337</CompanyId>         </GetCompanyWsdkUrlResult>      </GetCompanyWsdkUrlResponse>   </soap:Body></soap:Envelope>這些是我將數據解組成的結構:type Envelope struct {    XMLName     xml.Name    `xml:"Envelope"`    XMLNSs      string      `xml:"xmlns:soap,attr"`    XMLNSxsi    string      `xml:"xmlns:xsi,attr"`    XMLNSxsd    string      `xml:"xmlns:xsd,attr"`    Body}type Body struct {    Body        string      `xml:"Body"`    Response}type Response struct {    UrlResponse string      `xml:"GetCompanyWsdkUrlResponse"`    XMLNSs      string      `xml:"xmlns,attr"`    Result}type Result struct {    UrlResult   string      `xml:"GetCompanyWsdkUrlResult"`    XMLNSxsi    string      `xml:"xsi:type,attr"`    ResData}
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

(按編號問題的順序)


1. 啊,你太近了!最重要的是,你領導了“xsi:”和“xmlns:”,你不需要這樣做。我確實認為Go忽略了這些值,只是在之后查看字段。


以您的信封結構為例,它應該是這樣的(您的其他結構也需要在適當的情況下進行調整):


type Envelope struct {

    XMLName  xml.Name `xml:"Envelope"`

    XMLNSs   string   `xml:"soap,attr"` // Note the lack of `xmlns:`

    XMLNSxsi string   `xml:"xsi,attr"`

    XMLNSxsd string   `xml:"xsd,attr"`

    Body     Body     `xml:"Body"` // Note how we tell go about the body tag here

}

在上面的代碼塊中已經稍微觸及了這一點。但是,是的,有許多不同的方法可以做到這一點,但是我將發布一個轉到 Playground 的鏈接,您可以在其中找到一系列結構的工作示例,這些結構可以正確解析您提供的 SOAP XML。body


https://play.golang.org/p/L2F4bduac-3


3. 不,您可以選擇僅定義 SOAP 中所需的內容。讓我們假裝你只需要公司ID。你可以創建你的結構:


type OnlyCompanyID struct {

    XMLName   xml.Name `xml:"Envelope"`

    CompanyID int      `xml:"Body>GetCompanyWsdkUrlResponse>GetCompanyWsdkUrlResult>CompanyId"`

}

編輯:我強烈建議把我放進操場的東西弄亂。在我看來,解開 XML 比 Go 中的 JSON/YML 這樣更簡單的東西要棘手一些。請隨時放棄任何后續問題,我可以看到我能做些什么來解決這些問題:)


查看完整回答
反對 回復 2022-08-09
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號