Go 只获取列表的最后一项

Go 只获取列表的最后一项,go,xml-parsing,Go,Xml Parsing,那里 我正在解析xml文档并将其内容解组到结构中,但它只返回列表中的最后一项,而不是完整列表 列表是serverList,在解组后,它只返回最后一个server实例。我需要帮助 func main() { xmlFile := `<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <operationGetServerList> <returnCode>0</retu

那里

我正在解析xml文档并将其内容解组到结构中,但它只返回列表中的最后一项,而不是完整列表

列表是
serverList
,在解组后,它只返回最后一个
server
实例。我需要帮助

func main() {
    xmlFile := `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <operationGetServerList>
      <returnCode>0</returnCode>
      <message></message>
      <serverList>
      <server>
          <serverId>1</serverId>
          <nauServer>Main</nauServer>
          <serverIp>1.1.1.1</serverIp>
          <serverPort>8080</serverPort>
          <serverPortFtp>25</serverPortFtp>
          <serverHome>true</serverHome>
          <serverIsOnline>true</serverIsOnline>
        </server>
        <server>
          <serverId>2</serverId>
          <nauServer>Reg1</nauServer>
          <serverIp>1.1.1.2</serverIp>
          <serverPort>8080</serverPort>
          <serverPortFtp>25</serverPortFtp>
          <serverHome>false</serverHome>
          <serverIsOnline>false</serverIsOnline>
        </server>
      </serverList>
    </operationGetServerList>`

    type serverInfo struct {
        ServerID       string `xml:"serverId"`
        NauServer      string `xml:"nauServer"`
        ServerIP       string `xml:"serverIp"`
        ServerPort     int    `xml:"serverPort"`
        ServerPortFtp  int    `xml:"serverPortFtp"`
        ServerHome     bool   `xml:"serverHome"`
        ServerIsOnline bool   `xml:"serverIsOnline"`
    }

    type serverInstance struct {
        Server serverInfo `xml:"server"`
    }

    type operationGetServerListResponce struct {
        ReturnCode int              `xml:"returnCode"`
        Message    string           `xml:"message"`
        ServerList []serverInstance `xml:"serverList"`
    }

    var sL operationGetServerListResponce
    err := xml.Unmarshal([]byte(xmlFile), &sL)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%+v", sL)

}

XML没有
ServerList
的列表,而是
ServerList
包含
Server
的列表

您需要将结构更改为以下内容:

type serverInstance struct {
    Server []serverInfo `xml:"server"`
}

type operationGetServerListResponce struct {
    ReturnCode int              `xml:"returnCode"`
    Message    string           `xml:"message"`
    ServerList serverInstance   `xml:"serverList"`
}
这将正确输出所有服务器:

 {ReturnCode:0 Message: ServerList:{Server:[{ServerID:1 NauServer:Main
 ServerIP:1.1.1.1 ServerPort:8080 ServerPortFtp:25 ServerHome:true
 ServerIsOnline:true} {ServerID:2 NauServer:Reg1 ServerIP:1.1.1.2
 ServerPort:8080 ServerPortFtp:25 ServerHome:false
 ServerIsOnline:false} {ServerID:3 NauServer:Res1 ServerIP:1.1.1.3
 ServerPort:8080 ServerPortFtp:25 ServerHome:false
 ServerIsOnline:false} {ServerID:4 NauServer:Res2 ServerIP:1.1.1.4
 ServerPort:8080 ServerPortFtp:25 ServerHome:false
 ServerIsOnline:true}]}}

谢谢。我误解了xml数组。这是正确的答案。。。。实际上,您不需要使用
serverInstance
类型inbetween()这个:
ServerList[]serverInfo`xml:“ServerList>server”`
就足够了。@mkopriva感谢您的帮助,但第一个示例返回的列表中有空值。第二个没问题。你是对的,我的错,现在删除它。
 {ReturnCode:0 Message: ServerList:{Server:[{ServerID:1 NauServer:Main
 ServerIP:1.1.1.1 ServerPort:8080 ServerPortFtp:25 ServerHome:true
 ServerIsOnline:true} {ServerID:2 NauServer:Reg1 ServerIP:1.1.1.2
 ServerPort:8080 ServerPortFtp:25 ServerHome:false
 ServerIsOnline:false} {ServerID:3 NauServer:Res1 ServerIP:1.1.1.3
 ServerPort:8080 ServerPortFtp:25 ServerHome:false
 ServerIsOnline:false} {ServerID:4 NauServer:Res2 ServerIP:1.1.1.4
 ServerPort:8080 ServerPortFtp:25 ServerHome:false
 ServerIsOnline:true}]}}