mirror of
https://github.com/golang/go
synced 2024-11-24 23:47:55 -07:00
encoding/xml: fix default namespace of tags
The struct XMLName sets the default namespace, but that's not good enough for nested tags, because an earlier tag can set the implicit parents of a subsequent tag. This change makes sure that we always explicitly set the namespace on a tag when possible. See https://go-review.googlesource.com/#/c/5910/4/src/encoding/xml/marshal_test.go@628 for discussion. Change-Id: If1afc536471c0be83e5dd80381b598476ea3f44d Reviewed-on: https://go-review.googlesource.com/6927 Reviewed-by: Nigel Tao <nigeltao@golang.org> Reviewed-by: Dave Cheney <dave@cheney.net>
This commit is contained in:
parent
44e903158f
commit
9f9d66d3b6
@ -640,6 +640,8 @@ var marshalTests = []struct {
|
|||||||
`<x xmlns="space1">` +
|
`<x xmlns="space1">` +
|
||||||
`<c>c1</c>` +
|
`<c>c1</c>` +
|
||||||
`<d>d1</d>` +
|
`<d>d1</d>` +
|
||||||
|
`</x>` +
|
||||||
|
`<x>` +
|
||||||
`<e>e1</e>` +
|
`<e>e1</e>` +
|
||||||
`</x>` +
|
`</x>` +
|
||||||
`</top>`,
|
`</top>`,
|
||||||
|
@ -194,6 +194,14 @@ func structFieldInfo(typ reflect.Type, f *reflect.StructField) (*fieldInfo, erro
|
|||||||
return finfo, nil
|
return finfo, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if finfo.xmlns == "" && finfo.flags&fAttr == 0 {
|
||||||
|
// If it's an element no namespace specified, get the default
|
||||||
|
// from the XMLName of enclosing struct if possible.
|
||||||
|
if xmlname := lookupXMLName(typ); xmlname != nil {
|
||||||
|
finfo.xmlns = xmlname.xmlns
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Prepare field name and parents.
|
// Prepare field name and parents.
|
||||||
parents := strings.Split(tag, ">")
|
parents := strings.Split(tag, ">")
|
||||||
if parents[0] == "" {
|
if parents[0] == "" {
|
||||||
|
Loading…
Reference in New Issue
Block a user