Golang encoding/xml.Decoder.RawToken() example

package encoding/xml

RawToken is like Token but does not verify that start and end elements match and does not translate name space prefixes to their corresponding URLs.

Golang encoding/xml.Decoder.RawToken() usage example

 func (d *Decode) parseXML(s string, pre *node) bool {
  tokenArray := make([]xmlToken, 0, 64)

  decoder := xml.NewDecoder(strings.NewReader(s))
  for t, err := decoder.RawToken(); err == nil; t, err = decoder.RawToken() { // <-- here
 tokenArray = append(tokenArray, xmlToken{token: xml.CopyToken(t)})
  }

  var isXML bool
  for i := 0; i < len(tokenArray); i++ {
 if token, ok := tokenArray[i].token.(xml.CharData); ok {
 if i > 0 && i+1 < len(tokenArray) {
 if start, ok := tokenArray[i-1].token.(xml.StartElement); ok {
 if _, ok := tokenArray[i+1].token.(xml.EndElement); ok {
 isXML = true
 tokenArray[i].isData = true
 d.decode(string(token), &node{XMLOBJ, pre,
 start.Name.Local, &xmlObj{tokenArray, i}})
 }
 }
 }
 }
  }

  return isXML
 }

Reference :

http://golang.org/pkg/encoding/xml/#Decoder.RawToken

Advertisement