gpt4 book ai didi

xml - 从 XML 解析日期不起作用

转载 作者:IT王子 更新时间:2023-10-29 01:41:49 24 4
gpt4 key购买 nike

如果我用简单的值执行 time.Parse() - 那么一切都很好,但解析 XML 却不行。

type customDate struct {
time.Time
}


func (c *customDate) UnmarshalXml(d *xml.Decoder, start xml.StartElement) error {
var v string
if err := d.DecodeElement(&v, &start); err != nil{
return err
}

loc, _ := time.LoadLocation("Europe/Moscow")
prs, err := time.ParseInLocation("02.01.2006", v, loc)
if err != nil {
return err
}

*c = customDate{prs}
return nil
}

example on playground

最佳答案

date 是一个 XML 属性,而不是一个元素。因此,您必须实现 xml.UnmarshalerAttr接口(interface)而不是 xml.Unmarshaler :

package main

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

type xmlSource struct {
XMLName xml.Name `xml:"BicDBList"`
Base string `xml:"Base,attr"`
Items []item `xml:"item"`
}

// Item represent structure of node "item"
type item struct {
File string `xml:"file,attr"`
Date customDate `xml:"date,attr"`
}

type customDate struct {
time.Time
}

func (c *customDate) UnmarshalXMLAttr(attr xml.Attr) error {
loc, err := time.LoadLocation("Europe/Moscow")
if err != nil {
return err
}
prs, err := time.ParseInLocation("02.01.2006", attr.Value, loc)
if err != nil {
return err
}

c.Time = prs
return nil
}

var data = []byte(`<BicDBList Base="/mcirabis/BIK/">
<item file="bik_db_09122016.zip" date="09.12.2016"/>
<item file="bik_db_08122016.zip" date="08.12.2016"/>
<item file="bik_db_07122016.zip" date="07.12.2016"/>
<item file="bik_db_06122016.zip" date="06.12.2016"/>
</BicDBList>`)

func main() {
var sample xmlSource

err := xml.Unmarshal(data, &sample)

if err != nil {
println(err.Error())
}
fmt.Printf("%#v\n", sample)
}

https://play.golang.org/p/U56qfEOe-A

关于xml - 从 XML 解析日期不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41143350/

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