gpt4 book ai didi

xml - 使用 Go 解码嵌套的 xml

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

我有以下代码片段,我一直在用头撞墙试图让它工作。我到处寻找解决方案,但我发现的解决方案似乎都不起作用。

看来我对 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

最佳答案

首先您的所有代码都不起作用,因为您应该使用导出的 字段进行编码/解码(参见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

时该字段将被忽略

第二:

之后我注意到您忽略了您的错误。请不要忽视它们,它们非常有用。

上查看 go playgroung

如您所见,您对 datatypeDate 字段使用了 int 数据类型。如果将类型更改为 string,您的代码将起作用。

第三:

我认为您真的想将date 值解码为time.Time
为此,您可以检查 this related question

您可以在 go playground 上试用完整的工作代码

关于xml - 使用 Go 解码嵌套的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33557401/

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