解组具有属性和浮点值的 XML 元素
要解组具有属性和浮点值的 XML 元素,您可以定义具有相应字段的 Go 结构体。但是,关于 xml.Name 属性的使用有一些注意事项。
在提供的 XML 元素中:
<code class="xml"><thing prop="1"> 1.23 </thing></code>
ThingElem 结构应具有以下属性:
选项 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中文网其他相关文章!