...

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

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

     1  // from: https://www.reddit.com/r/golang/comments/99lnxd/help_needed_encodingxml_parsing_malformed_xml/
     2  //
     3  
     4  package main
     5  
     6  import (
     7  	"encoding/xml"
     8  	"fmt"
     9  
    10  	"github.com/clbanning/mxj"
    11  )
    12  
    13  func main() {
    14  	type decodedXml struct {
    15  		XMLName  xml.Name `xml:"tag"          binding:"required"`
    16  		SomeAttr string   `xml:"someattr,attr"`
    17  	}
    18  
    19  	data := []byte(`
    20  -==sddsfdqsdqsdsqd
    21  A BUNCH OF INVALID DATA IN THE XML FILE HAHAH
    22  --SEPARATERUFCIFHEIR
    23  Content-Type: text/plain
    24  
    25  <tag someattr="myvalue"></tag>
    26  --SEPARATERUFCIFHEIR--
    27  {"hello": "world"}
    28  		`)
    29  
    30  	// don't prepend attributes with '-'
    31  	mxj.SetAttrPrefix("")
    32  
    33  	// parse the data as a map[string]interface{} value
    34  	m, err := mxj.NewMapXml(data)
    35  	if err != nil {
    36  		fmt.Println("err:", err)
    37  		return
    38  	}
    39  	// check that we got a 'tag' tagged doc
    40  	if _, ok := m["tag"]; !ok {
    41  		fmt.Println("no tag doc ...")
    42  		return
    43  	}
    44  	fmt.Printf("%v\n", m)
    45  
    46  	// extract the attribute value
    47  	attrval, err := m.ValueForPath("tag.someattr")
    48  	if err != nil {
    49  		fmt.Println("err:", err)
    50  		return
    51  	}
    52  
    53  	// create decodeXml value
    54  	val := decodedXml{
    55  		XMLName:  xml.Name{"", "tag"},
    56  		SomeAttr: attrval.(string)}
    57  	fmt.Printf("%v\n", val)
    58  }
    59  

View as plain text