Go语言如何解析 XML 文档
代码创造者之梦
2024-04-02 17:21
短信预约 Go语言-IT技能 免费直播动态提醒
这篇文章将为大家详细讲解有关Go语言如何解析 XML 文档,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Go语言解析XML文档
Go语言原生支持XML解析,提供了标准库encoding/xml
,该库提供了两种主要方法来解析XML文档:
1. 使用xml.Decoder解码XML流
此方法适合解析流式XML输入,例如HTTP响应或文件。xml.Decoder
会逐个读取XML元素,并根据元素类型和标记属性,将它们解编为Go结构体或map。
// demo.go
package main
import (
"encoding/xml"
"fmt"
"io"
)
type Post struct {
XMLName xml.Name `xml:"post"`
Title string `xml:"title"`
Content string `xml:"content"`
}
func main() {
xmlString := `<post><title>My Title</title><content>My Content</content></post>`
decoder := xml.NewDecoder(strings.NewReader(xmlString))
for {
t, err := decoder.Token()
if err == io.EOF {
break
} else if err != nil {
fmt.Printf("Error decoding XML: %v", err)
return
}
switch t := t.(type) {
case xml.StartElement:
if t.Name.Local == "post" {
var post Post
err = decoder.DecodeElement(&post, &t)
if err != nil {
fmt.Printf("Error decoding post element: %v", err)
}
fmt.Printf("Post: %+v
", post)
}
}
}
}
2. 使用xml.Unmarshal解析XML字节
此方法适合解析预先解析好的XML文档,它将整个XML文档解析为Go数据结构。
// demo.go
package main
import (
"encoding/xml"
"fmt"
)
type Post struct {
XMLName xml.Name `xml:"post"`
Title string `xml:"title"`
Content string `xml:"content"`
}
func main() {
xmlString := `<post><title>My Title</title><content>My Content</content></post>`
var post Post
err := xml.Unmarshal([]byte(xmlString), &post)
if err != nil {
fmt.Printf("Error unmarshalling XML: %v", err)
}
fmt.Printf("Post: %+v
", post)
}
注意事项
- XML标签名区分大小写,应与Go结构体字段的名称匹配。
xml.Name
结构体用于解析XML元素的名称和空间。- 可以使用
xml.Attr
来解析和设置XML属性。 - 要忽略未知的XML元素,可以使用
xml.Skip
。 encoding/xml
库还支持其他功能,如验证、编码和定制编解码器。
以上就是Go语言如何解析 XML 文档的详细内容,更多请关注编程学习网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341