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
+15k Golang : Accurate and reliable decimal calculations
+8.8k Golang : Go as a script or running go with shebang/hashbang style
+18.4k Golang : Implement getters and setters
+8k Golang : Find relative luminance or color brightness
+7.3k Golang : Set horizontal, vertical scroll bars policies and disable interaction on Qt image
+8.2k Golang : How to check variable or object type during runtime?
+3.9k Detect if Google Analytics and Developer Media are loaded properly or not
+18.3k Golang : Iterating Elements Over A List
+13.2k Golang : Count number of runes in string
+7.6k Golang : Getting Echo framework StartAutoTLS to work
+46.1k Golang : Marshal and unmarshal json.RawMessage struct example
+25.5k Golang : How to write CSV data to file