This don't stable version
-
Ignore prefix in xml tag
Now
xml:"prefix:name"
is interpreted by Unmarshal asxml:"name"
This is necessary for the same behavior of Unmarshal/Marshal with prefix tags
-
Add support for xml.Unmarshaler
Now there is no need to change all implementations of xml.Unmarshaler to xmlutils.Unmarshaler
-
Add forwarding xmlutils.Decoder to xml.Unmarshaler
Now, regardless of how Unmarshal was launched (from xml or from xmlutils), you have the opportunity to use xmlutils where necessary
-
Move all existing structures from the fork back to encoding/xml
Now this is implemented for most structures (such as xml.StartElement, xml.Name, xml.Attr, xml.Token and others), but I do not exclude that there is something else that can be transferred
package main
import (
"fmt"
"encoding/xml"
"github.com/mantyr/xmlutils"
)
type A struct {
B struct {
Data string `xml:"prefix:data"`
}
}
func (a *A) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return xmlutils.NewTokenDecoder(d, start).Decode(&a.B)
}
func main() {
data := `<a><prefix:data>test</prefix:data></a>`
a := &A{}
err := xml.Unmarshal([]byte(data), &a)
fmt.Println(err)
fmt.Println(a.B.Data)
// Output:
// <nil>
// test
}
$ go get -u github.com/mantyr/xmlutils