...

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

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

     1  // https://www.reddit.com/r/golang/comments/9eclgy/xml_unmarshaling_internal_references/
     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  	val, err := m.ValueForKey("user", "-id:1")
    36  	if val != nil {
    37  		myStruct.FromUser = val.(map[string]interface{})["-name"].(string)
    38  	} else {
    39  		// if there no val, then err is at least KeyNotExistError
    40  		fmt.Println("err:", err)
    41  		return
    42  	}
    43  	val, err = m.ValueForKey("user", "-id:2")
    44  	if val != nil {
    45  		myStruct.ToUser = val.(map[string]interface{})["-name"].(string)
    46  	} else {
    47  		// if there no val, then err is at least KeyNotExistError
    48  		fmt.Println("err:", err)
    49  		return
    50  	}
    51  	val, err = m.ValueForKey("#text")
    52  	if val != nil {
    53  		myStruct.Message = val.(string)
    54  	} else {
    55  		// if there no val, then err is at least KeyNotExistError
    56  		fmt.Println("err:", err)
    57  		return
    58  	}
    59  
    60  	fmt.Printf("%#v\n", myStruct)
    61  }
    62  

View as plain text