In this exmaple, we will parse a div element with multiple span child
elements:
            
              example-4.xml |
              repository |
              view raw
            
            |  | <?xml version="1.0" encoding="UTF-8"?>
<div>
  <span>SpanText1</span>
  <span>SpanText2</span>
  <span>SpanText3</span>
</div>
 | 
  To parse multiple span child elements, the struct field in div struct of
previous example :
becomes:
SpanList    []span          `xml:"span"`
The type span becomes []span, and `xml:"span` is added to
indicate the tag name of child elements.
Run code on Go Playground
            
              parse-4.go |
              repository |
              view raw
            
            |  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | package main
import (
	"io/ioutil"
	"encoding/xml"
	"fmt"
)
type div struct {
	XMLName		xml.Name	`xml:"div"`
	SpanList	[]span		`xml:"span"`
}
type span struct {
//	XMLName		xml.Name	`xml:"span"`
	Text		string		`xml:",chardata"`
}
func main() {
	d := div{}
	xmlContent, _ := ioutil.ReadFile("example-4.xml")
	err := xml.Unmarshal(xmlContent, &d)
	if err != nil { panic(err) }
	fmt.Println(d)
	// uncomment XMLName struct field in span struct
	// the output of fmt.Println(d) will be:
	// {{ div} [{{ span} SpanText1} {{ span} SpanText2} {{ span} SpanText3}]}
}
 | 
  
The output result:
{{ div} [{SpanText1} {SpanText2} {SpanText3}]}
Note
If you uncomment the following line:
//  XMLName         xml.Name        `xml:"span"`
The output will be:
{{ div} [{{ span} SpanText1} {{ span} SpanText2} {{ span} SpanText3}]}
 
Tested on: Ubuntu Linux 14.10, Go 1.4.
[Golang] XML Parsing Example series: