我是 Go 新手。我有一个任务要做,我有一个具有以下结构的 xml 文件。该文件中还有许多其他标签记录。
我需要读取所有记录,并打印有关音乐种类的信息,但仅限于数据字段标记等于“650”且子字段代码标记=“a”的情况。
<record>
<leader>01153cjm a22002771a 4500</leader>
<controlfield tag="001"> 00000838 </controlfield>
<controlfield tag="003">DLC</controlfield>
<controlfield tag="005">20030506181700.0</controlfield>
<controlfield tag="007">sd|zsngnnmmned</controlfield>
<controlfield tag="008">000824s1998 nyuppn d</controlfield>
<datafield tag="050" ind1="0" ind2="0">
<subfield code="a">SDA 16949</subfield>
</datafield>
<subfield code="a"> 00000838 </subfield>
</datafield>
<datafield tag="020" ind1=" " ind2=" ">
<subfield code="c">$15.98</subfield>
</datafield>
<datafield tag="024" ind1="1" ind2=" ">
<subfield code="a">601215312621</subfield>
</datafield>
<datafield tag="650" ind1=" " ind2="0">
<subfield code="a">Rap (Music)</subfield>
</datafield>
</record>
我的代码是:
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
type Record struct {
XMLName xml.Name `xml:"record"`
Text string `xml:",chardata"`
Leader string `xml:"leader"`
Controlfield []struct {
Text string `xml:",chardata"`
Tag string `xml:"tag,attr"`
} `xml:"controlfield"`
Datafield []struct {
Text string `xml:",chardata"`
Tag string `xml:"tag,attr"`
Ind1 string `xml:"ind1,attr"`
Ind2 string `xml:"ind2,attr"`
Subfield []struct {
Text string `xml:",chardata"`
Code string `xml:"code,attr"`
} `xml:"subfield"`
} `xml:"datafield"`
}
func main() {
xmlFile, err := os.Open("music_lite3.xml")
if err != nil {
fmt.Println(err)
}
fmt.Println("Successfully Opened music_lite3.xml")
defer xmlFile.Close()
data, _ := ioutil.ReadAll(xmlFile)
var record Record
我在访问结构数据字段和子字段时遇到问题。似乎当调用 record.Datafield 和 record.Datafield.Subfield.Code Go 时无法识别结构。
有人可以帮助我吗?提前致谢。
偶然的你
相关分类