使用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
暗示了您看到的行为,我认为没有其他方法使用标记来改变这种行为。您可能想看看
解组器
界面,我相信您应该能够利用它。