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
+7.8k Golang : Check if user agent is a robot or crawler example
+10.4k Golang : Qt progress dialog example
+8.9k Golang : Web routing/multiplex example
+7.7k Golang : Accessing content anonymously with Tor
+26.9k Golang : Get local IP and MAC address
+5.8k Golang : Set horizontal, vertical scroll bars policies and disable interaction on Qt image
+3.2k Golang : Get a list of crosses(instruments) available to trade from Oanda account
+10.1k Golang : zlib compress file example
+15.4k Golang : Calculate entire request body length during run time
+4.7k Golang : Gargish-English language translator
+4.4k Facebook : How to force facebook to scrape latest URL link data?
+7k Golang : Simple histogram example