猿问

Golang - 将 XML time.Time 编组为 XML 属性的日期格式

我正在尝试格式化自定义时间类型 Date,它实现了 Marshaler 接口,并在编写为 XML 时简单地将自身格式化为“2006-01-02”。


type Person struct {

    ...

    DateOfBirth           Date      `xml:"DOB,attr"`

    ...

}


type Date time.Time


func (d Date) MarshalXML(e *xml.Encoder, start xml.StartElement) error {

    dateString := fmt.Sprintf("\"%v\"", time.Time(d).Format("2006-01-02"))    

    e.EncodeElement(dateString, start)


    return nil

}

我使用这个 SO作为参考,但错误 - &xml.UnsupportedTypeError{Type:(*reflect.rtype)} - 被抛出。


我错过了一些东西,有什么想法吗?


拉莫斯之舞
浏览 274回答 1
1回答

GCT1015

您正在实现错误的接口。由于 Date 类型旨在作为属性进行封送处理(如xml:"DOB,attr"标签所示),因此它需要实现xml.MarshalerAttr接口:type MarshalerAttr interface {    MarshalXMLAttr(name Name) (Attr, error)}所以你可能需要添加这样的代码:func (d Date) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {    dateString := time.Time(d).Format("2006-01-02")        attr := xml.Attr {        name,        dateString,    }    return attr, nil}请注意,我从值字符串中删除了明显不必要的引号。
随时随地看视频慕课网APP

相关分类

Go
我要回答