Golang XML Parse

In this article, we will explore how to parse XML using the encoding/XML package. Keep in mind that this is a basic tutorial that you can expand to work with any XML file.

Sample XML File

In this example, we will use the example XML file as provided below. Feel free to copy the contents and experiment with it yourself.

<?xml version="1.0"?>


<book id="bk101">

<author>Gambardella, Matthew</author>

<title>XML Developer's Guide</title>




<description>An in-depth look at creating applications

with XML.</description>


<book id="bk102">

<author>Ralls, Kim</author>

<title>Midnight Rain</title>




<description>A former architect battles corporate zombies,

an evil sorceress, and her own childhood to become queen

of the world.</description>


<book id="bk103">

<author>Corets, Eva</author>

<title>Maeve Ascendant</title>




<description>After the collapse of a nanotechnology

society in England, the young survivors lay the

foundation for a new society.</description>



The previous example contains a catalog of various books with nested elements, such as author, title, genre, and more.


The first step is to import the required package. For this tutorial, we need the os package to read files and the encoding/XML package to parse XML files:

import (

Once imported, we can get started.

Golang Read XML File

Let us start by reading our XML file. We can do this using the Open method from the os package. An example code is as shown below:

package main
import (

funcmain() {
    // open xml
    file, err := os.Open("books.xml")
    if err != nil {

Defining Structures

To parse XML, we will need to make use of Golang structures. We can create one to represent the book catalog from the XML file.

The following example provides the book construct.

The resulting code is as shown:

type Books struct {
    XMLNamexml.Name `xml:"book"`
    Author string `xml:"author"`
    Title string `xml."title"`
    Genre string `xml."genre"`
    Price float64 `xml."price"`
    PublishData string `xml."publish_date"`
    Description string `xml."description"`

Golang Marshals XML

The next step is to marshal the XML data. Hence, we need to convert the data into byte array. We can do this using the code provided below:

b_ARR := ioutil.ReadAll(file)

var books Books

xml.Unmarshal(b_ARR, &books)

Now that the XML information is stored in the struct, you can reference the fields to get the value.


This article was a tutorial on parsing XML files using the encoding/XML package. We discussed the basics, the imports, reading the XML file, defining the structures, and how Golang marshals the XML data. We hope you found this article helpful. Check out other Linux Hint articles for more tips and information.

About the author

John Otieno

My name is John and am a fellow geek like you. I am passionate about all things computers from Hardware, Operating systems to Programming. My dream is to share my knowledge with the world and help out fellow geeks. Follow my content by subscribing to LinuxHint mailing list