使用xml.Name和[]xml.Attr时属性重复
当我使用像使用xml.Name和[]xml.Attr时属性重复,xml,go,Xml,Go,当我使用像 type MyStruct struct { XMLName xml.Name Attrs []xml.Attrs `xml:",attr,any"` } 取自xmlns-属性的名称空间既是Attrs中的属性,也是XMLName.Space的值。这是不幸的,因为我希望,Attrs只包含其他地方无法处理的属性 更糟糕的是,当我封送和解封一个XML时,我希望得到相同的XML。相反,我得到了一些东西,看起来坏了xmlns加倍 package main import (
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))
}
主程序包
进口(
“编码/xml”
“fmt”
)
func main(){
var Foo结构{
XMLName xml.Name`xml:“`
Attr[]xml.Attr`xml:,Attr,any“`
}=结构{
XMLName xml.Name`xml:“`
Attr[]xml.Attr`xml:,Attr,any“`
}{}
str:=`
`
fmt.Println(str)
xml.Unmarshal([]字节(str),&Foo)
b、 @xml:=xml.Marshal(&Foo)
格式打印项次(字符串(b))
}
导致
<foo xmlns="bar"/>
<foo xmlns="bar" xmlns="bar"></foo>
我怎样才能避免这种情况?有没有一种方法可以告诉解码器完全忽略某些属性?如果您想避免
marshall
之后的双重xmlns
,您可以将XMLName
标记从xml:
更改为xml:
。就主要问题而言,在我看来,any
暗示了您看到的行为,我认为没有其他方法使用标记来改变这种行为。您可能想看看解组器
界面,我相信您应该能够利用它。