这篇文章将为大家详细讲解有关Go语言如何把 XML 数据解析到数组中,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Go 语言解析 XML 到数组
解析 XML 到数组的步骤:
-
导入 encoding/xml 包:
import "encoding/xml"
-
创建 XML 解码器:
decoder := xml.NewDecoder(xmlData)
-
解析 XML 文档:
for { // 解析下一个 XML 元素 token, err := decoder.Token() if err == io.EOF { // 到达文档末尾,解析完成 break } if err != nil { // 解析错误 return nil, err } // 处理不同类型的 XML 元素 switch t := token.(type) { // 解析 XML 元素 case xml.StartElement: // 解析元素名称和属性 elementData, err := decodeElementData(t) if err != nil { return nil, err } arrayData = append(arrayData, elementData) // 解析元素文本内容 case xml.CharData: if len(trimSpace(t)) > 0 { arrayData = append(arrayData, trimSpace(t)) } } }
-
解析 XML 元素数据:
func decodeElementData(element xml.StartElement) (string, error) { var attrs []xml.Attr // 解析元素属性 for _, attr := range element.Attr { attrs = append(attrs, attr) } // 序列化属性和元素文本内容 data, err := xml.Marshal(struct { Attrs []xml.Attr `xml:"attr"` Data string `xml:",chardata"` }{attrs, ""}) if err != nil { return "", err } return string(data), nil }
-
去除字符串中的空白字符:
func trimSpace(s string) string { return strings.TrimSpace(s) }
-
返回解析结果:
return arrayData, nil
示例代码:
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func main() {
xmlData := `<root>
<element1 attr1="value1" attr2="value2">text1</element1>
<element2>text2</element2>
</root>`
arrayData, err := parseXML(xmlData)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(arrayData)
}
func parseXML(xmlData string) ([]string, error) {
decoder := xml.NewDecoder(strings.NewReader(xmlData))
var arrayData []string
for {
token, err := decoder.Token()
if err == io.EOF {
break
}
if err != nil {
return nil, err
}
switch t := token.(type) {
case xml.StartElement:
elementData, err := decodeElementData(t)
if err != nil {
return nil, err
}
arrayData = append(arrayData, elementData)
case xml.CharData:
if len(trimSpace(t)) > 0 {
arrayData = append(arrayData, trimSpace(t))
}
}
}
return arrayData, nil
}
func decodeElementData(element xml.StartElement) (string, error) {
var attrs []xml.Attr
for _, attr := range element.Attr {
attrs = append(attrs, attr)
}
data, err := xml.Marshal(struct {
Attrs []xml.Attr `xml:"attr"`
Data string `xml:",chardata"`
}{attrs, ""})
if err != nil {
return "", err
}
return string(data), nil
}
func trimSpace(s string) string {
return strings.TrimSpace(s)
}
以上就是Go语言如何把 XML 数据解析到数组中的详细内容,更多请关注编程学习网其它相关文章!