Go语言解析XML主要依靠encoding/xml标准库,通过结构体标签映射XML节点与属性,用xml.Unmarshal反序列化、xml.Marshal生成XML,需注意字段导出、标签匹配、错误处理及命名空间支持。
Go语言解析XML主要靠标准库encoding/xml,核心是用结构体标签映射XML元素,再通过xml.Unmarshal反序列化,或xml.Marshal生成XML。关键在结构体定义是否准确、标签是否匹配。
XML解析依赖结构体字段的xml标签,控制字段与XML节点/属性的对应关系:
xml:"name":匹配同名XML元素(区分大小写)xml:"name,attr":匹配XML属性(如 → ID string `xml:"id,attr"`)xml:",chardata":捕获文本内容(如Hello → Text string `xml:",chardata"`)xml:",any":通配未定义字段,存入[]byte
xml:",omitempty":序列化时忽略零值字段用xml.Unmarshal将字节切片或io.Reader转为结构体:
xml.Unmarshal([]byte(xmlStr), &v)
xml.NewDecoder(file).Decode(&v)(支持流式读取大文件)nil错误时需处理,常见如标签不匹配、嵌套错位、编码问题(确保UTF-8)复杂XML需组合结构体嵌套、切片和指针:
)→ 字段类型为[]Item
*string)或xml:",omitempty"
map[string]interface{}配合xml:",any",但需手动解析内部xmlns:ns="http://example.com")→ 标签中加前缀,如xml:"ns:name",并确保解析器识别该命名空间用xml.Marshal或xml.MarshalIndent(带缩进)将结构体转XML:
),加omitempty可跳过xml:"root"
xmlfmt等工具验证格式合法性