Read a XML file in Go
Golang has a very powerful encoding/xml
package that comes with the standard library. All you need to do is the create the data structures to map according to XML document.
In this tutorial we will learn how to read this XML document with the xml.Unmarshal()
function
Employee.xml
<?xml version="1.0"?>
<company>
<staff>
<id>101</id>
<firstname>Derek</firstname>
<lastname>Young</lastname>
<username>derekyoung</username>
</staff>
<staff>
<id>102</id>
<firstname>John</firstname>
<lastname>Smith</lastname>
<username>johnsmith</username>
</staff>
</company>
and map to these data structs and print out the values
type Staff struct {
XMLName xml.Name `xml:"staff"`
ID int `xml:"id"`
FirstName string `xml:"firstname"`
LastName string `xml:"lastname"`
UserName string `xml:"username"`
}
type Company struct {
XMLName xml.Name `xml:"company"`
Staffs []Staff `xml:"staff"`
}
In real life, a company has many staffs. Therefore, we map Company.Staffs to Staff struct.
With the data structures defined. We are going to use the xml.Unmarshal()
function to load the XML data into the Company structure.
var c Company
xml.Unmarshal(XMLdata, &c)
Below is the full code of reading the XML file Employees.xml
package main
import (
"fmt"
"io/ioutil"
"os"
"encoding/xml"
)
type Staff struct {
XMLName xml.Name `xml:"staff"`
ID int `xml:"id"`
FirstName string `xml:"firstname"`
LastName string `xml:"lastname"`
UserName string `xml:"username"`
}
type Company struct {
XMLName xml.Name `xml:"company"`
Staffs []Staff `xml:"staff"`
}
func (s Staff) String() string {
return fmt.Sprintf("\t ID : %d - FirstName : %s - LastName : %s - UserName : %s \n", s.ID, s.FirstName , s.LastName, s.UserName)
}
func main() {
xmlFile, err := os.Open("Employees.xml")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer xmlFile.Close()
XMLdata, _ := ioutil.ReadAll(xmlFile)
var c Company
xml.Unmarshal(XMLdata, &c)
fmt.Println(c.Staffs)
}
and the output after parsing.
go run parseEmployee.go
ID : 101 - FirstName : Derek - LastName : Young - UserName : derekyoung
ID : 102 - FirstName : John - LastName : Smith - UserName : johnsmith
Hope this tutorial is helpful enough to you. Please leave your comment below if you have any question.
See also : Golang : How to read CSV file
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
+4.5k Golang : Frobnicate or tweaking a string example
+7.8k Golang : Simple histogram example
+13.6k Golang : Search folders for file recursively with wildcard support
+8.1k Golang : Play .WAV file from command line
+50.4k Golang : How to get struct field and value by name
+5.7k Golang : Check if password length meet the requirement
+12.9k Golang : Convert IP version 6 address to integer or decimal number
+8.4k Golang : Qt get screen resolution and display on center example
+34.2k Golang : Validate IP address
+9.5k Golang : How to unmarshal JSON inner/nested value and assign to specific struct?
+4.8k Fix fatal error: evacuation not done in time problem
+18.3k Golang : Close channel after ticker stopped example