我有以下代码片段,我一直在努力让它工作。我到处寻找解决方案,但我找到的解决方案似乎都不起作用。
我的映射似乎有问题xml.Unmarshal
命令,因为它涉及嵌套字段。下面的代码用于检索第一个被称为的值unit
,并且位于 xml 代码的顶层。
另外两个字段为零,并且嵌套了两层。这意味着结构设置不正确。这是代码。
package main
import (
"encoding/xml"
"fmt"
)
type datevalue struct {
Date int `xml:"date"`
Value float32 `xml:"value"`
}
type pv struct {
XMLName xml.Name `xml:"series"`
Unit string `xml:"unit"`
datevalues datevalue `xml:"values>dateValue"`
}
func main() {
contents := `<series>
<timeUnit>DAY</timeUnit>
<unit>Wh</unit><measuredBy>INVERTER</measuredBy>
<values><dateValue>
<date>2015-11-04 00:00:00</date>
<value>5935.405</value>
</dateValue></values>
</series>`
m := &pv{}
xml.Unmarshal([]byte(contents), &m)
fmt.Printf("%s %f %d\n", m.Unit, m.datevalues.Value, m.datevalues.Date)
}
这是输出:
Wh 0.000000 0
First你所有的代码都不起作用,因为你应该使用exported用于编组/解编组的字段(参见https://golang.org/pkg/encoding/xml/ https://golang.org/pkg/encoding/xml/).
你应该使用
type pv struct {
XMLName xml.Name `xml:"series"`
Unit string `xml:"unit"`
Datevalues datevalue `xml:"values>dateValue"`
}
代替
type pv struct {
XMLName xml.Name `xml:"series"`
Unit string `xml:"unit"`
datevalues datevalue `xml:"values>dateValue"`
}
查看 DateValues 字段名称。如果第一个符号是大写的,它将被导出。否则该字段将被忽略Unmarshal
Second:
之后我注意到你忽略了你的错误。请不要忽视它们,它们非常有用。
Check it out on the go playgroung http://play.golang.org/p/6vqtSRhRcv
正如你所看到的,你使用int
数据类型为Date
现场datatype
。
如果您将类型更改为string
,您的代码将会工作。
Third:
我想你真的想解开你的date
值转化为time.Time
.
为此,您可以检查这个相关问题 https://stackoverflow.com/questions/17301149/golang-xml-unmarshal-and-time-time-fields
The complete working code you can try on the go playground http://play.golang.org/p/l8qdPXy2KR
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)