This is a fork of the Go encoding/xml package that improves support for XML namespaces, kept in sync with golang/go#48641.
It allows round-trip unmarshaling/marshaling with explicit namespace prefixes. For example, this can be unmarshalled and re-marshalled into this precise XML:
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<domain:check xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>golang.org</domain:name>
<domain:name>go.dev</domain:name>
</domain:check>
</check>
</command>
</epp>
For marshaling, a preferred namespace prefix can now be specified in a struct tag or XMLName
value by prefixing the local name:
xml:"urn:ietf:params:xml:ns:domain-1.0 domain:check"
Name-spaced tag and attribute names are now strictly parsed and will fail with an error if any are malformed, such as having a leading or trailing colon, or more than 1 colon.
An example playground that would be fixed with this package:
https://play.golang.org/p/-6Ee8tcLl2L
// Instead of "encoding/xml"
import "github.com/nbio/xml"
Because this package tracks the current [master] branch of the Go repository, only the latest stable release of Go is guaranteed to be supported. The following commits are not present in this fork to permit use under the current stable release: