Go语言通过encoding/xml库实现结构体与XML互转,依赖struct tags定义映射规则。1. 编码时使用xml.Marshal或xml.MarshalIndent将结构体转为格式化XML,需指定字段标签如xml:"name",其中XMLName设置根元素,",attr"表示属性输出,并添加xml.Header声明版本编码。2. 解码时用xml.Unmarshal将XML数据解析到结构体,要求字段标签与XML节点名一致,可正确映射元素内容和属性值。3. 支持多种标签选项:xml:",chardata"解析文本内容,xml:",omitempty"在字段为空时忽略输出,xml:"-"忽略字段,xml:",innerxml"自定义内部XML。该机制适用于配置文件处理和Web服务通信,标准库支持简洁高效。

Go语言中可以通过标准库 encoding/xml 将结构体编码为XML,也可以将XML数据解码回结构体。整个过程依赖结构体标签(struct tags)来控制字段与XML元素的映射关系。
要将Go结构体序列化为XML,需使用 xml.Marshal 函数。结构体字段需要通过 xml:"tagname" 标签指定对应的XML元素名。
示例:
package main
<p>import (
"encoding/xml"
"fmt"
"os"
)</p><p>type Person struct {
XMLName xml.Name <code>xml:"person"</code>
Name string <code>xml:"name"</code>
Age int <code>xml:"age"</code>
Email string <code>xml:"email,attr"</code> // 作为属性输出
}</p><p>func main() {
p := Person{
Name: "Alice",
Age: 30,
Email: "alice@example.com",
}</p><pre class='brush:php;toolbar:false;'>output, err := xml.MarshalIndent(p, "", " ")
if err != nil {
fmt.Fprintf(os.Stderr, "错误: %v\n", err)
return
}
fmt.Println(xml.Header + string(output))}
立即学习“go语言免费学习笔记(深入)”;
输出结果:
<?xml version="1.0" encoding="UTF-8"?>说明:
- XMLName xml.Name`xml:"person"` 定义根元素名称。
- email,attr 表示该字段作为XML属性而非子元素。
- 使用 xml.MarshalIndent 可生成格式化缩进的XML,便于阅读。
- 添加 xml.Header 确保输出包含标准XML声明。
使用 xml.Unmarshal 可将XML数据解析到结构体中,字段标签必须与XML结构匹配。
示例:
data := `
<person email="bob@example.com">
<name>Bob</name>
<age>25</age>
</person>`
<p>var p Person
err := xml.Unmarshal([]byte(data), &p)
if err != nil {
fmt.Fprintf(os.Stderr, "解析错误: %v\n", err)
return
}
fmt.Printf("%+v\n", p)</p>输出:
{XMLName:{Space: Local:person} Name:Bob Age:25 Email:bob@example.com}
只要结构体字段标签与XML节点名一致,就能正确映射内容和属性。
xml标签支持多种修饰符,灵活控制输出格式:
xml:"name":字段对应名为 name 的子元素xml:"name,attr":作为属性输出,如 name="value"
xml:",chardata":将字段值作为文本内容(CDATA)嵌入父元素xml:"-":忽略该字段xml:",omitempty":当字段为空时忽略输出xml:",innerxml":自定义内部XML内容(高级用法)例如处理内联文本:
type Book struct {
Title string `xml:"title"`
Price string `xml:"price,chardata"` // 内容直接作为文本
}
// <book>99.99</book> 中的 99.99 被解析到 Price
基本上就这些。结构体与XML互转在配置文件解析或Web服务通信中很实用,Go的标准库提供了简洁而强大的支持。
以上就是Go语言怎么将结构体编码为XML_Go语言结构体与XML互转实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号