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
+12.8k Golang: Pad right or print ending(suffix) zero or spaces in fmt.Printf example
+7.7k Golang : Random integer with rand.Seed() within a given range
+4k Golang : Convert lines of string into list for delete and insert operation
+11.6k Golang : Drop cookie to visitor's browser and http.SetCookie() example
+24.4k Golang : How to write CSV data to file
+5.6k Golang : How to setup a disk space used monitoring service with Telegram bot
+8.7k Golang : Sort and reverse sort a slice of floats
+19.7k Golang : For loop continue,break and range
+5.5k Golang : Embedded or data bundling example
+8.2k Mac OSX : Get a process/daemon status information
+4.8k Get website traffic ranking with Similar Web or Alexa