【问题标题】:go unmarshal xml with attributes使用属性解组 xml
【发布时间】:2019-08-22 23:47:40
【问题描述】:

无法将 xml 解组,因此我可以访问 xml 属性。不知道我在这一点上做错了什么。它符合要求,但该结构似乎不包含任何数据。

import (
    "io/ioutil"
    "encoding/xml"
    "fmt"
)

xml的内容:

  <module id="Core" description="Core Module" tenantId="tenant1" major="3" minor="4" patch="0" build="0">
    <probePath path="bin" />
  </module>
</metadata>
type ModuleField struct {
    Id string `xml:"id,attr"`
    Description string `xml:"description,attr"`
    TenantId string `xml:"tenantId,attr"`
    Major string `xml:"major,attr"`
    Minor string `xml:"minor,attr"`
    Patch string `xml:"patch,attr"`
}

type Module struct {
    ModuleField ModuleField
    ProbePath string `xml:"probePath"`
}

type Metadata struct {
    XMLName xml.Name `xml:"metadata"`
    Module Module
}

// read xml file
    raw, _ := ioutil.ReadFile(XMLLoc)
    if err != nil {
        return
    }


    var XMLData Metadata 
    xml.Unmarshal(raw, &XMLData)

    // nothing is being printed
    fmt.Println(">",XMLData.Module.ModuleField.TenantId,"<")


【问题讨论】:

  • 您的所有属性都在 module 元素上,但字段不在您用来表示该元素的 Module 类型上,它们在另一种已设置的类型上就好像您期待一个不存在的 ModuleField 子元素一样。

标签: xml go


【解决方案1】:

字母大小写很重要,因此元素module 不会被解组到名为Module 的字段中,您需要添加正确的标记。此外,您还需要将 ModuleField 嵌入到 Module 中,以便将其字段提升Module,然后才能将它们解组。或者,您也可以删除 ModuleField 并将其所有字段移至 Module

https://play.golang.org/p/AvaEpcKY-oh

【讨论】:

  • 嗨,谢谢你,你的回答真的让我明白了。
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 2021-09-16
  • 2012-12-10
  • 2012-04-01
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多