Go 只获取列表的最后一项
那里 我正在解析xml文档并将其内容解组到结构中,但它只返回列表中的最后一项,而不是完整列表 列表是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
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}]}}