繁体   English   中英

一个简单的xml元素如何解组到golang结构?

[英]How does a simple xml element unmarshal to a golang struct?

假设以下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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM