...
1
2
3 package main
4
5 import (
6 "fmt"
7
8 "github.com/clbanning/mxj"
9 )
10
11 var data = []byte(`<app>
12 <users>
13 <user id="1" name="Jeff" />
14 <user id="2" name="Sally" />
15 </users>
16 <messages>
17 <message id="1" from_user="1" to_user="2">Hello!!</message>
18 </messages>
19 </app>`)
20
21 func main() {
22 m, err := mxj.NewMapXml(data)
23 if err != nil {
24 fmt.Println("err:", err)
25 return
26 }
27 fmt.Printf("%v\n", m)
28
29 type mystruct struct {
30 FromUser string
31 ToUser string
32 Message string
33 }
34 myStruct := mystruct{}
35 vals, err := m.ValuesForPath("app.users.user", "-id:1")
36 if err != nil {
37 fmt.Println("err:", err)
38 return
39 }
40 if len(vals) == 1 {
41 myStruct.FromUser = vals[0].(map[string]interface{})["-name"].(string)
42 }
43 vals, err = m.ValuesForPath("app.users.user", "-id:2")
44 if err != nil {
45 fmt.Println("err:", err)
46 return
47 }
48 if len(vals) == 1 {
49 myStruct.ToUser = vals[0].(map[string]interface{})["-name"].(string)
50 }
51 vals, err = m.ValuesForPath("app.messages.message.#text")
52 if err != nil {
53 fmt.Println("err:", err)
54 return
55 }
56 if len(vals) == 1 {
57 myStruct.Message = vals[0].(string)
58 }
59
60 fmt.Printf("%#v\n", myStruct)
61 }
62
View as plain text