...
1
2
3 package main
4
5 import (
6 "fmt"
7 "strconv"
8
9 "github.com/clbanning/mxj"
10 )
11
12 var data = []byte(`
13 <a>
14 <b>1</b>
15 </a>`)
16
17 func main() {
18 m, err := mxj.NewMapXml(data)
19 if err != nil {
20 fmt.Println("new err:", err)
21 return
22 }
23 b, err := m.ValueForPath("a.b")
24 if err != nil {
25 fmt.Println("value err:", err)
26 return
27 }
28
29 b, err = appendElement(b, 2)
30 if err != nil {
31 fmt.Println("append err:", err)
32 return
33 }
34
35
36
37
38
39
40 val := map[string]interface{}{"b": b}
41 n, err := m.UpdateValuesForPath(val, "a.b")
42 if err != nil {
43 fmt.Println("update err:", err)
44 return
45 }
46 if n == 0 {
47 fmt.Println("err: a.b not updated, n =", n)
48 return
49 }
50
51 x, err := m.XmlIndent("", " ")
52 if err != nil {
53 fmt.Println("XmlIndent err:", err)
54 return
55 }
56 fmt.Println(string(x))
57 }
58
59 func appendElement(v interface{}, n int) (interface{}, error) {
60 switch v.(type) {
61 case string:
62 v = []interface{}{v.(string), strconv.Itoa(n)}
63 case []interface{}:
64 v = append(v.([]interface{}), interface{}(strconv.Itoa(n)))
65 default:
66
67 return v, fmt.Errorf("invalid type")
68 }
69 return v, nil
70 }
71
View as plain text