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

Go使用xml.Unmarshal解析单标签XML无法获取值该如何解决

问题原因

你原有的结构体定义逻辑不符合XML的结构匹配规则:你给Boolean字段标注的xml:"boolean"标签,含义是在当前结构体对应的XML根节点下,查找名为boolean的子节点,将子节点内容赋值给该字段。但你提供的XML中根节点本身就是boolean,不存在对应的子节点,自然匹配不到内容,只能拿到类型的默认零值。

解决方案

场景1:解析无命名空间的简化XML

方法1:结构体显式匹配根节点结构

引入标准库的xml.Name字段指定结构体对应的根元素名,用,chardata标签标识该字段取元素内部的文本内容:

import "encoding/xml"

type Authenticate struct {
    XMLName xml.Name `xml:"boolean"`
    Boolean bool     `xml:",chardata"`
}

调用xml.Unmarshal时传入*Authenticate类型的指针即可完成解析。

方法2:直接解析到基础类型变量

因为是单标签无嵌套的简单结构,不需要额外定义结构体,直接传入对应类型的指针即可解析:

var res bool
err := xml.Unmarshal([]byte(`<boolean>true</boolean>`), &res)
// 解析完成后res的值为true

场景2:解析带命名空间的原始XML

需要在标签中补充命名空间声明,标签格式为xml:"命名空间 元素名":

type Authenticate struct {
    XMLName xml.Name `xml:"http://foo.com.BARRSD/ boolean"`
    Boolean bool     `xml:",chardata"`
}

如果使用直接解析到基础类型的方案,不需要做额外适配,xml.Unmarshal会自动匹配根节点内容完成解析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:36:00