...
1
2
3
4 package main
5
6 import (
7 "fmt"
8 "github.com/clbanning/mxj"
9 )
10
11 var xmlData = []byte(`<?xml version="1.0" encoding="UTF-8"?>
12 <response>
13 <lst name="list1">
14 </lst>
15 <lst name="list2">
16 </lst>
17 <lst name="list3">
18 <int name="docId">1</int>
19 <lst name="list3-1">
20 <lst name="list3-1-1">
21 <lst name="list3-1-1-1">
22 <int name="field1">1</int>
23 <int name="field2">2</int>
24 <int name="field3">3</int>
25 <int name="field4">4</int>
26 <int name="field5">5</int>
27 </lst>
28 </lst>
29 <lst name="list3-1-2">
30 <lst name="list3-1-2-1">
31 <int name="field1">1</int>
32 <int name="field2">2</int>
33 <int name="field3">3</int>
34 <int name="field4">4</int>
35 <int name="field5">5</int>
36 </lst>
37 </lst>
38 </lst>
39 </lst>
40 </response>`)
41
42 func main() {
43
44 m, merr := mxj.NewMapXml(xmlData)
45 if merr != nil {
46 fmt.Println("merr:", merr.Error())
47 return
48 }
49
50
51
52 lstVal, lerr := m.ValuesForPath("*.*.*.*.*", "-name:list3-1-1-1")
53 if lerr != nil {
54 fmt.Println("ierr:", lerr.Error())
55 return
56 }
57
58
59 mv := mxj.Map(lstVal[0].(map[string]interface{}))
60
61
62
63 var names = []string{"field1", "field2", "field3", "field4", "field5"}
64 for _, n := range names {
65 vals, verr := mv.ValuesForKey("*", "-name:"+n)
66 if verr != nil {
67 fmt.Println("verr:", verr.Error(), len(vals))
68 return
69 }
70
71
72
73 fmt.Println(n, ":", vals[0].(map[string]interface{})["#text"])
74 }
75 }
76
View as plain text