You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言使用encoding/xml解析XML无法填充结构体是什么原因?

问题原因
  • 核心问题是结构体定义的XML标签映射规则和实际XML结构不匹配:
    1. 你要解析的XML根节点就是<RESULTS>,解码时会直接把根节点对应到你传入的Results结构体实例
    2. 根节点<RESULTS>下的直接子节点是多个<NAME>,但你原本给Results.Names字段加的标签是xml:"RESULTS",相当于告诉解析器去根节点下找名为<RESULTS>的子节点,再把它下面的内容解析为[]Name类型,实际XML里没有这层嵌套结构,所以解析结果为空。
修复方案

只需要修改Results结构体的字段标签,将Names字段的XML映射目标改为NAME即可:

type Results struct {
    Names   []Name `xml:"NAME"` // 将原来的RESULTS改为NAME
}
修复后完整可运行代码
package main
import "fmt"
import "encoding/xml"
import "bytes"

type Name struct {
    Name    string  `xml:"NAME"`
}
type Results struct {
    Names   []Name `xml:"NAME"`
}

func main() {
    data := []byte(`
<?xml version="1.0" encoding="UTF-8"?>
<RESULTS>
 <NAME>Apple</NAME>
 <NAME>Banana</NAME>
</RESULTS>
`)
    var r Results
    decoder := xml.NewDecoder(bytes.NewBuffer(data))
    unError := decoder.Decode(&r)
    if unError != nil {
        fmt.Println("XML Unmarshaling error:", unError )
    }else{
        fmt.Printf("%v", r)
    }
}

运行后输出为:{[{Apple} {Banana}]},符合预期。

内容的提问来源于stack exchange,提问作者ymudyruc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:09:01