Go语言encoding/xml包支持XML序列化与反序列化,核心是xml标签用法:字段映射元素名、,attr表属性、,chardata捕获文本、,any捕获未知子元素、,omitempty忽略零值。
Go 语言的 encoding/xml 包提供了简洁、高效的 XML 序列化(marshal)和反序列化(unmarshal)能力,无需第三方依赖。核心在于结构体标签 xml: 的正确使用,以及理解默认行为与常见陷阱。
XML 解析的关键是让 Go 结构体字段与 XML 节点一一对应。通过 xml 标签控制映射方式:
Name → )xml:"name" 强制指定元素名xml:"name,attr" 表示该字段解析为 XML 属性(attribute)xml:",chardata" 捕获文本内容(如 Hello 中的 Hello)xml:",any" 捕获未知子元素(需配合自定义 UnmarshalXML)xml:",omitempty" 序列化时忽略零值字段示例结构体:
type Person struct {使用 xml.Unmarshal 将 XML 数据转为 Go 结构体。支持 []byte、io.Reader(如 strings.NewReader 或文件流):
体转为格式化 XML 字符串用 xml.MarshalIndent 生成缩进可读的 XML;xml.Marshal 输出紧凑格式:
复杂 XML 需注意细节:
xml:"parent>child" 或分层结构体,attr,否则会被忽略)默认不解析;如需捕获,需实现 UnmarshalXML 方法)可通过 xml.Name.Space 访问,或在结构体字段中用 xml:"rss xmlns,attr" 提取)可映射为 bool 类型字段,但需确保 XML 值为 "true"/"false" 或按需自定义解析不复杂但容易忽略