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

标签 xml go

我正在尝试设置自定义时间类型 Date 的格式,它实现了 Marshaler 接口(interface),并且在编写为 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
}

我正在使用 this SO作为引用,但会抛出错误 - &xml.UnsupportedTypeError{Type:(*reflect.rtype)}

我遗漏了什么,有什么想法吗?

最佳答案

您正在实现错误的接口(interface)。

由于 Date 类型要作为属性进行编码(如 xml:"DOB,attr" 标记所示),它需要实现 xml.MarshalerAttr接口(interface):

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
}

请注意,我从值字符串中删除了明显不必要的引号。

关于xml - Golang - 将 XML time.Time 编码为 XML 属性的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36607875/

相关文章:

python - 使用 ElementTree 访问 xml 文件中的元素和标记

c# - XML + LINQ 是否会在 C# 中为大量数据提供良好的性能?

javascript - 将控制台答案导出到 xml

go - 替代 golang 中的 load_pem_private_key()

go - 随着时间的推移而超时。After 并不像使用自动收报机或计时器超时

interface - 将参数设置为接口(interface)或接口(interface)列表

jquery - 如何使用 JQuery 或任何其他 Java 脚本方法从此 XML 检索数据

java - Android studio "java.lang.OutOfMemoryError"模拟器 redmi 2 prime kitkat

go - 为什么 go 需要双引号导入声明

去读线-> 字符串