当我使用像
这样的结构时type MyStruct struct {
XMLName xml.Name
Attrs []xml.Attrs `xml:",attr,any"`
}
从xmlns
- 属性中获取的命名空间既是Attrs
中的属性,也是XMLName.Space
的值。这是不幸的,因为我希望,Attrs
只包含属性,而不是在其他地方处理
更糟糕的是,当我整理和解组XML时,我希望得到相同的XML。相反,我得到的东西看起来很破碎。 xmlns
加倍
package main
import (
"encoding/xml"
"fmt"
)
func main() {
var Foo struct {
XMLName xml.Name `xml:""`
Attr []xml.Attr `xml:",attr,any"`
} = struct {
XMLName xml.Name `xml:""`
Attr []xml.Attr `xml:",attr,any"`
}{}
str := `
<foo xmlns="bar"/>
`
fmt.Println(str)
xml.Unmarshal([]byte(str), &Foo)
b, _ := xml.Marshal(&Foo)
fmt.Println(string(b))
}
https://play.golang.org/p/ulWy-Paha2
结果
<foo xmlns="bar"/>
<foo xmlns="bar" xmlns="bar"></foo>
我该如何避免这种情况?有没有办法告诉解码器完全忽略某些属性?