0

0

Go语言怎么将结构体编码为XML_Go语言结构体与XML互转实现

畫卷琴夢

畫卷琴夢

发布时间:2025-10-30 17:55:01

|

615人浏览过

|

来源于php中文网

原创

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语言怎么将结构体编码为xml_go语言结构体与xml互转实现

Go语言中可以通过标准库 encoding/xml 将结构体编码为XML,也可以将XML数据解码回结构体。整个过程依赖结构体标签(struct tags)来控制字段与XML元素的映射关系。

结构体转XML(编码)

要将Go结构体序列化为XML,需使用 xml.Marshal 函数。结构体字段需要通过 xml:"tagname" 标签指定对应的XML元素名。

示例:

package main

import ( "encoding/xml" "fmt" "os" )

type Person struct { XMLName xml.Name xml:"person" Name string xml:"name" Age int xml:"age" Email string xml:"email,attr" // 作为属性输出 }

func main() { p := Person{ Name: "Alice", Age: 30, Email: "alice@example.com", }

output, err := xml.MarshalIndent(p, "", "  ")
if err != nil {
    fmt.Fprintf(os.Stderr, "错误: %v\n", err)
    return
}

fmt.Println(xml.Header + string(output))

}

立即学习go语言免费学习笔记(深入)”;

输出结果:


ail="alice@example.com">
  Alice
  30

说明:
- XMLName xml.Name`xml:"person"` 定义根元素名称。
- email,attr 表示该字段作为XML属性而非子元素。
- 使用 xml.MarshalIndent 可生成格式化缩进的XML,便于阅读。
- 添加 xml.Header 确保输出包含标准XML声明。

XML转结构体(解码)

使用 xml.Unmarshal 可将XML数据解析到结构体中,字段标签必须与XML结构匹配。

Open Voice OS
Open Voice OS

OpenVoiceOS是一个社区驱动的开源语音AI平台

下载

示例:

data := `

  Bob
  25
`

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)

输出:
{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"` // 内容直接作为文本
}
// 99.99 中的 99.99 被解析到 Price

基本上就这些。结构体与XML互转在配置文件解析或Web服务通信中很实用,Go的标准库提供了简洁而强大的支持。

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1878

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2085

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

993

2024.11.28

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

195

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

187

2025.07.04

Go中Type关键字的用法
Go中Type关键字的用法

Go中Type关键字的用法有定义新的类型别名或者创建新的结构体类型。本专题为大家提供Go相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.09.06

go怎么实现链表
go怎么实现链表

go通过定义一个节点结构体、定义一个链表结构体、定义一些方法来操作链表、实现一个方法来删除链表中的一个节点和实现一个方法来打印链表中的所有节点的方法实现链表。

444

2023.09.25

go语言编程软件有哪些
go语言编程软件有哪些

go语言编程软件有Go编译器、Go开发环境、Go包管理器、Go测试框架、Go文档生成器、Go代码质量工具和Go性能分析工具等。本专题为大家提供go语言相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.10.13

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.7万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号