gpt4 book ai didi

xml - 在 golang 中将单个字段编码为两个标签

转载 作者:IT王子 更新时间:2023-10-29 01:58:56 25 4
gpt4 key购买 nike

试图了解一种为 xml 结构化创建自定义编码器的方法:

<Appointment>
<Date>2004-12-22</Date>
<Time>14:00</Time>
</Appointment>

我在想这样的事情:

type Appointment struct {
DateTime time.Time `xml:"???"`
}

问题是,我会用什么代替 ???将单个字段保存到两个不同的 xml 标记中?

最佳答案

复杂的编码/解码行为通常需要满足 Marshal/Unmarshal 接口(interface)(这适用于 XML、JSON 和类似的 go 设置类型)。

您需要使用 MarshalXML() 函数来满足 xml.Marshaler 接口(interface),如下所示:

package main

import (
"encoding/xml"
"fmt"
"time"
)

type Appointment struct {
DateTime time.Time
}

type appointmentExport struct {
XMLName struct{} `xml:"appointment"`
Date string `xml:"date"`
Time string `xml:"time"`
}

func (a *Appointment) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
n := &appointmentExport{
Date: a.DateTime.Format("2006-01-02"),
Time: a.DateTime.Format("15:04"),
}
return e.Encode(n)
}

func main() {
a := &Appointment{time.Now()}
output, _ := xml.MarshalIndent(a, "", " ")
fmt.Println(string(output))
}

// prints:
// <appointment>
// <date>2016-04-15</date>
// <time>17:43</time>
// </appointment>

关于xml - 在 golang 中将单个字段编码为两个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com