gpt4 book ai didi

xml - 带有 SOAP 的 golang

转载 作者:IT王子 更新时间:2023-10-29 02:24:06 24 4
gpt4 key购买 nike

下面是代码

package main

import (
"fmt"
"encoding/xml"
)

type Return struct {
RequestId int
DataCenterId string
DataCenterVersion int
StorageId string
}

type StorageReturn struct{
Ret Return `xml:"return"`
}

type Body struct {
StrgRet StorageReturn `xml:"ns:createStorageReturn"`
}

type StorageResponse struct{
XMLName xml.Name
RespBody Body `xml:"S:Body"`
}


func main(){
s = `<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:createStorageReturn xmlns:ns2="http://ws.api.mysite.com/"><return><requestId>16660663</requestId><dataCenterId>ssrr-444tt-yy-99</dataCenterId><dataCenterVersion>12</dataCenterVersion><storageId>towrrt24903FR55405</storageId></return></ns2:createStorageReturn></S:Body></S:Envelope>`

parser := xml.NewDecoder(bytes.NewBufferString(s))
envelope := new(StorageResponse)
err = parser.DecodeElement(&envelope, nil)
if err != nil {
fmt.Printf("Error in parsing")
fmt.Printf("%v", err)
return
}
fmt.Printf("%+v", envelope)
}

它确实打印了这个---

{XML 名称:{空格:http://schemas.xmlsoap.org/soap/envelope/ Local:Envelope} RespBody:{StrgRet:{Ret:{RequestId:0 DataCenterId: DataCenterVersion:0 StorageId:}}}}

不知道为什么。

我不擅长 xml 解析,我不明白我做错了什么。为了进一步引用,我在这里提到这是来 self 要解析的 SOAP 调用的响应。调用和接收部分被省略,因为它们工作正常并且没有问题。问题只是返回 XML 的解析。

请帮帮我。

提前致谢

根据悟空的要求。这是我在上面发布的代码的工作版本

package main

import (
"fmt"
"encoding/xml"
)

type Return struct {
RequestId int `xml:"requestId"`
DataCenterId string `xml:"dataCenterId"`
DataCenterVersion int `xml:"dataCenterVersion"`
StorageId string `xml:"storageId"`
}

type StorageReturn struct{
Ret Return `xml:"return"`
}

type Body struct {
StrgRet StorageReturn `xml:"createStorageReturn"`
}

type StorageResponse struct{
XMLName xml.Name `xml:"Envelope"`
RespBody Body `xml:"Body"`
}


func main(){
s := `<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:createStorageReturn xmlns:ns2="http://ws.api.mysite.com/"><return><requestId>16660663</requestId><dataCenterId>ssrr-444tt-yy-99</dataCenterId><dataCenterVersion>12</dataCenterVersion><storageId>towrrt24903FR55405</storageId></return></ns2:createStorageReturn></S:Body></S:Envelope>`

v := StorageResponse{}
err := xml.Unmarshal([]byte(s), &v)
if err != nil{
fmt.Println(err)
}
fmt.Printf("%+v", v)
}

最佳答案

self 宣传:https://github.com/kylewolfe/simplexml (正在开发中,但我已经将它用于一些项目)。此外,这将帮助您了解进出的内容:https://github.com/ernesto-jimenez/httplogger

您打印的是一个空结构(具有默认值),未能正确解码,很可能是由于命名空间问题。

关于xml - 带有 SOAP 的 golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28308100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com