Golang : Read XML elements data with xml.CharData example
For this post, we will learn how to read inner XML elements data with xml.CharData
type. This tutorial will show you how to handle xml.CharData
variable as an array of bytes and then to convert to a string for display.
Here we go!
package main
import (
"encoding/xml"
"fmt"
"strings"
)
var XMLdata = `<urlset>
<url>
<loc>http://www.example.com/xml-element-golang</loc>
<lastmod>2015-06-14</lastmod>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://www.example.com/extract-element-by-for-loop</loc>
<lastmod>2015-06-14</lastmod>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
<urlset>`
// ignore <loc>, only use chardata because DecodeElement will work on <loc>
type XMLQuery struct {
Loc string `xml:",chardata"`
}
var l XMLQuery
func main() {
// example on handling XML chardata(string)
decoder := xml.NewDecoder(strings.NewReader(string(XMLdata)))
for {
// err is ignore here. IF you are reading from a XML file
// do not ignore err and also check for io.EOF
token, _ := decoder.Token()
if token == nil {
break
}
switch Element := token.(type) {
case xml.StartElement:
if Element.Name.Local == "loc" {
fmt.Println("Element name is : ", Element.Name.Local)
err := decoder.DecodeElement(&l, &Element)
if err != nil {
fmt.Println(err)
}
fmt.Println("Element value is : ", l.Loc)
}
// print out the element data
// convert to []byte slice and cast to string type
case xml.CharData:
str := string([]byte(Element))
fmt.Println(str)
}
}
}
Sample output :
Element name is : loc
Element value is : http://www.example.com/xml-element-golang
2015-06-14
daily
0.5
Element name is : loc
Element value is : http://www.example.com/extract-element-by-for-loop
2015-06-14
daily
0.5
Happy coding!
References :
https://www.socketloop.com/references/golang-encoding-xml-chardata-type-examples
https://www.socketloop.com/tutorials/golang-search-and-extract-certain-xml-data-example
See also : Golang : Search and extract certain XML data example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+11.4k Golang : Convert(cast) float to int
+9.1k Golang : How to protect your source code from client, hosting company or hacker?
+22.7k Golang : Randomly pick an item from a slice/array example
+31.4k Golang : Convert an image file to []byte
+5.9k PHP : How to handle URI or URL with non-ASCII characters such as Chinese/Japanese/Korean(CJK) ?
+16.2k Golang : How to implement two-factor authentication?
+6.9k Golang : Dealing with postal or zip code example
+17.5k Golang : Login and logout a user after password verification and redirect example
+23.2k Golang : minus time with Time.Add() or Time.AddDate() functions to calculate past date
+9k Golang : Temperatures conversion example
+10.4k Golang : Flip coin example
+27.7k Golang : Move file to another directory