空のgoインターフェイスタイプの変数にアンマーシャリングしようとしています。具体的な型は適切な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
しかし、名前空間と実際の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
インターフェイスをインスタンス化することはできません。具体的な型のインスタンスを保持するインターフェイス型の変数のみを持つことができます。 – Adrian
@Adrian、それは私が言ったことです。私は質問を編集しました。 –
関連するコード例をここに入力してください。 –