Golang解析XML时出现问题
Golang解析XML时出现问题 我正在尝试解析XML
但我得到
arr.Data 未定义(类型 Data 没有字段或方法 Data)
我期望输出
01 Hello
02 GoodBue
6 回复
更多关于Golang解析XML时出现问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在你的版本中第一个元素 01 Hello 缺失了。实际上确实需要遍历 for 循环,因为这只是一个示例,真实数据量要大得多。
你的 Data 只包含单个 Cue,而 XML 中有两个。XML 似乎只保留了其中的最后一个。
因此,你需要修改 Data,使其包含一个 Cue 数组。
XML文档具有单一的根元素Data。无需进行迭代操作,直接访问arr的成员即可。
package main
import "fmt"
import "encoding/xml"
type Data struct {
XMLName xml.Name `xml:"Data"`
Cue Cue `xml:"Cue"`
}
type Cue struct {
XMLName xml.Name `xml:"Cue"`
Value string `xml:"value,attr"`
Cdata string `xml:",chardata"`
}
func main() {
x := `<?xml version='1.0'?><Data contentPath='local'><Cue value='01'><![CDATA[Hello]]></Cue><Cue value='02'><![CDATA[Goodbye]]></Cue></Data>`
var arr Data
xml.Unmarshal([]byte(x), &arr)
fmt.Println(arr)
fmt.Println(arr.Cue)
}
问题出在您的XML结构定义和解析逻辑上。XML中的<data>元素包含多个<item>子元素,但您的结构体定义没有正确反映这种嵌套关系。
以下是修正后的代码:
package main
import (
"encoding/xml"
"fmt"
)
type Data struct {
XMLName xml.Name `xml:"data"`
Items []Item `xml:"item"`
}
type Item struct {
XMLName xml.Name `xml:"item"`
ID string `xml:"id"`
Value string `xml:"value"`
}
func main() {
xmlData := `
<data>
<item>
<id>01</id>
<value>Hello</value>
</item>
<item>
<id>02</id>
<value>GoodBue</value>
</item>
</data>`
var data Data
err := xml.Unmarshal([]byte(xmlData), &data)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
for _, item := range data.Items {
fmt.Printf("%s %s\n", item.ID, item.Value)
}
}
主要修改点:
- 将
Data结构体中的字段从Data []Item改为Items []Item,并使用正确的XML标签xml:"item" - 添加了
XMLName字段来明确指定XML元素名称 - 遍历时使用
data.Items而不是arr.Data
输出结果:
01 Hello
02 GoodBue
这样就能正确解析XML并输出期望的结果了。

