...

Source file src/github.com/clbanning/mxj/v2/examples/append.go

Documentation: github.com/clbanning/mxj/v2/examples

     1  // Per https://github.com/clbanning/mxj/issues/34
     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  	// Create the new value for 'b' as a map
    36  	// and update 'm'.
    37  	// We should probably have an UpdateValueForPath
    38  	// method just as there is ValueForPath/ValuesForPath
    39  	// methods.
    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  		// capture map[string]interface{} value, simple element, etc.
    67  		return v, fmt.Errorf("invalid type")
    68  	}
    69  	return v, nil
    70  }
    71  

View as plain text