encoding/xml with namespaces

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">
                        <domain:check xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">

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:



// Instead of "encoding/xml"
import "github.com/nbio/xml"


To ease keeping this code in sync with a fork of Go, this repository contains a go.mod file in vendor/go/src that declares itself as the std package. This package must be tested from that directory:

cd vendor/go/src && go test -v ./encoding/xml


View Github