如何封送XML

时间:2018-09-17 10:40:18

标签: go marshalling

我有两个结构以便编组成XML

//Accounts ...
type Accounts struct {
    XMLName     xml.Name `xml:"account"`
    AccNumber   string   `xml:"iban"`

}

//Accounts ...
type AccountsList struct {
    XMLName    xml.Name   `xml:"response"`
    ResultCode string     `xml:"resultCode"`
    Accounts   []Accounts `xml:"result"`
}

我正在获取下一个xml结构:

<response>
    <resultCode>...</resultCode>
    <account>
        <iban>...</iban>
    </account>
    <account>
        <iban>...</iban>
    </account>
</response>

但是我还需要<result>标签,所以我需要下一个xml:

<response>
    <resultCode>...</resultCode>
    <result>
        <account>
            <iban>...</iban>
        </account>
        <account>
            <iban>...</iban>
        </account>
    <result>  
</response>

为什么Golang XML编组器忽略xml:"result"结构中的AccountsList这个东西? 是否可以在不使用第三种结构的情况下获得我想要的结果

2 个答案:

答案 0 :(得分:4)

您可以将字段标签名称从result更改为result>account

type AccountsList struct {
    XMLName    xml.Name   `xml:"response"`
    ResultCode string     `xml:"resultCode"`
    Accounts   []Accounts `xml:"result>account"`
}

这将用accounts标签包裹您的result切片。

请参阅:https://play.golang.org/p/E2oJeO81wKh

答案 1 :(得分:0)

请仔细阅读下面的代码,我已经在实际环境中对其进行了测试,并且没有出现任何错误。

func main() {
var al AccountsList
output, err := xml.MarshalIndent(al, "  ", "    ")
    fmt.Println("Hello, playground", err)
    fmt.Println(string(output))

}

您也可以使用此link对其进行测试。