首页 > 后端开发 > Golang > 我是否需要使用 XMLName 来解组具有属性和浮点值的 XML 元素?

我是否需要使用 XMLName 来解组具有属性和浮点值的 XML 元素?

Barbara Streisand
发布: 2024-10-23 22:52:02
原创
809 人浏览过

Do I Need to Use XMLName for Unmarshaling XML Elements with Attributes and Floating Point Values?

解组具有属性和浮点值的 XML 元素

要解组具有属性和浮点值的 XML 元素,您可以定义具有相应字段的 Go 结构体。但是,关于 xml.Name 属性的使用有一些注意事项。

在提供的 XML 元素中:

<code class="xml"><thing prop="1">
  1.23
</thing></code>
登录后复制

ThingElem 结构应具有以下属性:

  • Prop:该字段对应属性prop,类型为int。
  • Value:该字段对应浮点值1.23。

选项 1:使用 XMLName

在此选项中,您可以向 ThingElem 结构添加 xml.Name 字段。当 XML 结构不明确时通常使用此字段。在这种情况下,这是不必要的,因为很明显该结构对应于 thing 元素。

<code class="go">type ThingElem struct {
    XMLName xml.Name `xml:"thing"` // Do I even need this?
    Prop    int      `xml:"prop,attr"`
    Value   float    // ???
}</code>
登录后复制

选项 2:不使用 XMLName

因为没有歧义在 XML 结构中,您可以省略 xml.Name 字段。

<code class="go">type ThingElem struct {
    Prop  int   `xml:"prop,attr"`
    Value float // ???
}</code>
登录后复制

解组浮点值

要正确解组浮点值,您需要确保 XML 中没有空格。在您的示例中,该值为 1.23,但建议删除空格并将其存储为 1.23。

解组嵌套数据

您还可以通过以下方式解组嵌套数据定义一个包装结构。例如,XML 包含多个事物元素。要解组它们,您需要定义一个 ThingWrapper 结构体:

<code class="go">type ThingWrapper struct {
    T ThingElem `xml:"thing"`
}</code>
登录后复制

完整代码示例

以下是解组所提供的 XML 数据的完整代码示例:

<code class="go">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)
}</code>
登录后复制

此代码将打印解析后的 XML 数据,包括 prop 属性和浮点值。

以上是我是否需要使用 XMLName 来解组具有属性和浮点值的 XML 元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板