gpt4 book ai didi

xml - 在 golang 中解码到实例化的空接口(interface)

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

我正在尝试解码为一个空的 go 接口(interface)类型的变量。具体类型具有适当的 xml 标记,但由于某种原因我无法解码 xml 值。他们只是空无一人。

这段代码做了我想做的:

type Address struct {
City, State string
}

type Result struct {
XMLName xml.Name `xml:"Person"`
Name string `xml:"FullName" json:"FullName"`
Address interface{}
}

func main() {

xmlAddress := &Address{}
xmlResult := &Result{Name: "none", Address: xmlAddress}

xmlData := `
<Person>
<FullName>Mike McCartney</FullName>
<Address>
<City>Austin</City>
<State>Texas</State>
</Address>
</Person>
`

err := xml.Unmarshal([]byte(xmlData), xmlResult)

// xmlResult = {"XMLName":{"Space":"","Local":"Person"},"FullName":"Mike McCartney","Address":{"City":"Austin","State":"Texas"}}
}

完整代码:https://play.golang.org/p/QXyoOPMFZr

但在我自己的示例中,使用带有 namespace 的实际 xml 它不起作用:

type Envelope struct {
XMLName xml.Name `xml:"http://www.w3.org/2003/05/soap-envelope Envelope"`
Body Body `xml:"http://www.w3.org/2003/05/soap-envelope Body"`
}

type Body struct {
XMLName xml.Name `xml:"http://www.w3.org/2003/05/soap-envelope Body"`
Content interface{}
}

type DebtorGetNameResponse struct {
XMLName xml.Name `xml:"http://e-conomic.com Debtor_GetNameResponse"`
DebtorGetNameResult string `xml:"Debtor_GetNameResult"`
}

func main() {

xmlData := `
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<Debtor_GetNameResponse xmlns="http://e-conomic.com">
<Debtor_GetNameResult>THIS SHOULD BE IN THE OUTPUT</Debtor_GetNameResult>
</Debtor_GetNameResponse>
</soap:Body>
</soap:Envelope>`

e := new(Envelope)
res := new(DebtorGetNameResponse)
e.Body = Body{Content: res}

err := xml.Unmarshal([]byte(xmlData), e)

// res = {"XMLName":{"Space":"","Local":""},"DebtorGetNameResult":""}
}

完整代码:https://play.golang.org/p/AsV1LGW1lR

最佳答案

您需要将 xml 标签添加到您的 interface{} ,即。

Content interface{} `xml:"http://e-conomic.com Debtor_GetNameResponse"`

Address interface{}在你的另一个例子中是有效的,因为它的名字与 xml 标签相同 <Address></Address>Unmarshal通过它查找。

关于xml - 在 golang 中解码到实例化的空接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44722580/

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