Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在golang中将单个字段编组为两个标记_Xml_Go_Marshalling - Fatal编程技术网

Xml 在golang中将单个字段编组为两个标记

Xml 在golang中将单个字段编组为两个标记,xml,go,marshalling,Xml,Go,Marshalling,试图了解一种为以下结构的xml创建自定义封送拆收器的方法: 2004-12-22 14:00 我在想这样的事情: 类型约会结构{ DateTime.time`xml:“?”` } 问题是,我会用什么来代替???要将单个字段保存到两个不同的xml标记中?快速猜测,您不能。您应该使用约会类型实现xml.Marshaler接口…复杂的封送/解封行为通常需要满足封送/解封接口(对于go中的xml、JSON和类似的设置类型,这是正确的) 您需要使用MarshalXML()函数满足xml.Marsha

试图了解一种为以下结构的xml创建自定义封送拆收器的方法:


2004-12-22
14:00
我在想这样的事情:

类型约会结构{
DateTime.time`xml:“?”`
}

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

快速猜测,您不能。您应该使用
约会
类型实现
xml.Marshaler
接口…

复杂的封送/解封行为通常需要满足封送/解封接口(对于go中的xml、JSON和类似的设置类型,这是正确的)

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

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”
“fmt”
“时间”
)
类型约会结构{
日期时间,时间
}
类型指定导出结构{
XMLName结构{}`xml:“约会”`
日期字符串`xml:“日期”`
时间字符串`xml:“时间”`
}
func(a*约会)封送xml(e*xml.Encoder,start xml.StartElement)错误{
n:=&任命导出{
日期:a.DateTime.Format(“2006-01-02”),
时间:a.DateTime.Format(“15:04”),
}
返回e.Encode(n)
}
func main(){
a:=&约会{time.Now()}
输出,u:=xml.marshallindent(a,“,”)
fmt.Println(字符串(输出))
}
//印刷品:
// 
//     2016-04-15
//     17:43
// 

您可能需要创建自己的封送拆收器来实现
xml。封送拆收器
将负责将
DateTime
字段拆分为
date
time
,然后再封送到xml。是的,这是我已经做过的事情。并不是说这不是一个好的解决方案,但我认为可能会有更简单的解决方案