// gonuts5.go - from https://groups.google.com/forum/#!topic/golang-nuts/MWoYY19of3o // problem is to extract entries from by "int name=" package main import ( "fmt" "github.com/clbanning/mxj" ) var xmlData = []byte(` 1 1 2 3 4 5 1 2 3 4 5 `) func main() { // parse XML into a Map m, merr := mxj.NewMapXml(xmlData) if merr != nil { fmt.Println("merr:", merr.Error()) return } // extract the 'list3-1-1-1' node - there'll be just 1? // NOTE: attribute keys are prepended with '-' lstVal, lerr := m.ValuesForPath("*.*.*.*.*", "-name:list3-1-1-1") if lerr != nil { fmt.Println("ierr:", lerr.Error()) return } // assuming just one value returned - create a new Map mv := mxj.Map(lstVal[0].(map[string]interface{})) // extract the 'int' values by 'name' attribute: "-name" // interate over list of 'name' values of interest var names = []string{"field1", "field2", "field3", "field4", "field5"} for _, n := range names { vals, verr := mv.ValuesForKey("*", "-name:"+n) if verr != nil { fmt.Println("verr:", verr.Error(), len(vals)) return } // values for simple elements have key '#text' // NOTE: there can be only one value for key '#text' fmt.Println(n, ":", vals[0].(map[string]interface{})["#text"]) } }