使用xml.Name和[] xml.Attr时的重复属性

时间:2017-09-08 14:11:13

标签: 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 (
    "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>

我该如何避免这种情况?有没有办法告诉解码器完全忽略某些属性?

0 个答案:

没有答案