以下是我尝试使用Golang的一些XML文件。实际的XML文件超过500 MB。
<artists>
<artist>
<id>1</id>
<name>The Persuader</name>
<realname>Jesper Dahlbäck</realname>
<profile />
</artist>
<artist>
<id>22</id>
<name>DATacide</name>
<profile>Datacide began recording together in 1993, after Tetsu Inoue met Uwe Schmidt while vacationing near Frankfurt.
</profile>
<members>
<id>25</id>
<name>Tetsu Inoue</name>
<id>519207</id>
<name>Uwe Schmidt</name>
</members>
</artist>
</artists>
这是Go代码。我想要获取MEMBERS部分中的所有ID字段,但我的代码只抓取最后一个ID字段,其中可能没有,一个或多个。如何将MEMBERS部分中的所有ID都存入MEMBERS数组?
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
type Artists struct {
XMLName xml.Name `xml:"artists"`
Artist []Artist `xml:"artist"`
}
type Artist struct {
XMLName xml.Name `xml:"artist"`
ArtistID uint32 `xml:" id,omitempty"`
ArtistName string `xml:" name,omitempty"`
Profile string `xml:" profile,omitempty"`
RealName string `xml:" realname,omitempty"`
Members MembersID `xml:"members,omitempty"`
}
type MembersID struct {
MemberID uint32 `xml:"id,omitempty"`
}
func main() {
xmlFile, err := os.Open("short_artists.xml")
if err != nil {
fmt.Println(err)
}
fmt.Println("Successfully opened artists file")
defer xmlFile.Close()
byteValue, _ := ioutil.ReadAll(xmlFile)
var artists Artists
xml.Unmarshal(byteValue, &artists)
for i := 0; i < len(artists.Artist); i++ {
fmt.Println("ArtistID: " + fmt.Sprint(artists.Artist[i].ArtistID))
fmt.Println("Name: " + artists.Artist[i].ArtistName)
fmt.Println("Real Name: " + artists.Artist[i].RealName)
fmt.Println("Profile: " + artists.Artist[i].Profile)
fmt.Println("")
fmt.Printf("%v\n",artists.Artist[i].Members)
fmt.Println("")
}
}
我所有的Google和DuckDuckGo搜索都是紫色的。谢谢你的帮助。
答案 0 :(得分:1)
问题是MembersID
结构定义。你必须使用切片。
type MembersID struct {
MemberID []uint32 `xml:"id,omitempty"`
}
播放链接:https://play.golang.org/p/h4qTmSQoRg
输出:
ArtistID: 1
Name: The Persuader
Real Name: Jesper Dahlbäck
Profile:
Members: []
ArtistID: 22
Name: DATacide
Real Name:
Profile: Datacide began recording together in 1993, after Tetsu Inoue met Uwe Schmidt while vacationing near Frankfurt.
Members: [25 519207]
额外提示:
如果需要,可以选择性地获取XML路径值。例如,获取XML路径的所有ID artist>members>id
type MemberID struct {
IDs []uint32 `xml:"artist>members>id"`
}
播放链接:https://play.golang.org/p/sj7XPisgl7
输出:
[25 519207]