gpt4 book ai didi

xml - 一个简单的 xml 元素如何解码为 golang 结构?

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

假设以下 xml 元素具有一个属性和一个浮点值:

<thing prop="1">
1.23
</thing>
<thing prop="2">
4.56
</thing>

为了解码它,我应该如何定义我的结构?

type ThingElem struct {
Prop int `xml:"prop,attr"`
Value float // ???
}

type ThingWrapper struct {
T ThingElem `xml:"thing"`
}

// VS

type ThingElem struct {
XMLName xml.Name `xml:"thing"` // Do I even need this?
Prop int `xml:"prop,attr"`
Value float // ???
}

XMLName 属性的用法让我感到困惑。什么时候应该放在结构中,什么时候作为标签放在包装器中?

最佳答案

您可以在下面找到解码给定数据的代码。

  1. 只有去掉空格才能正确解码浮点值。
  2. 可以使用“,chardata”注解来引用标签的内容。
  3. 您不需要在结构中指定 xml.Name 字段,只要应该使用哪个结构没有歧义即可。

package main

import (
"encoding/xml"
"fmt"
)

type Root struct {
Things []Thing `xml:"thing"`
}

type Thing struct {
Prop int `xml:"prop,attr"`
Value float64 `xml:",chardata"`
}

func main() {
data := `
<root>
<thing prop="1">1.23</thing>
<thing prop="2">4.56</thing>
</root>
`
thing := &Root{}
err := xml.Unmarshal([]byte(data), thing)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(thing)
}

关于xml - 一个简单的 xml 元素如何解码为 golang 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911763/

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