为了账号安全,请及时绑定邮箱和手机立即绑定

go xml 解析“看不到”任何字段

go xml 解析“看不到”任何字段

Go
素胚勾勒不出你 2021-06-24 07:51:57
我一定遗漏了一些非常明显的东西......我正在尝试解析一个简单的 XML 文件,按照ExampleUnmarshal()这里的示例:http : //golang.org/src/pkg/encoding/xml/example_test.go正如您将在本文底部看到的,没有任何属性或子元素被映射 - 无论是方向 - Marshal 还是 Unmarshal。据我所知,这几乎与他们在上面的 example_test.go 中所做的完全相同(我能看到的唯一区别是该测试中的类型在函数的范围内 - 我尝试过,没有区别,并且他们使用子元素而不是属性 - 除了id- 但每个文档名称,attr 应该工作 afaict)。代码如下所示:package mainimport (    "fmt"    "encoding/xml"    "io/ioutil")type String struct {    XMLName xml.Name `xml:"STRING"`    lang  string   `xml:"lang,attr"`    value  string   `xml:"value,attr"`}type Entry struct {    XMLName xml.Name `xml:"ENTRY"`    id      string  `xml:"id,attr"`    strings []String }type Dictionary struct {    XMLName xml.Name `xml:"DICTIONARY"`    thetype  string   `xml:"type,attr"`    ignore  string   `xml:"ignore,attr"`    entries []Entry  }func main() {    dict := Dictionary{}    b := []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><DICTIONARY type="multilanguage" ignore="en">  <ENTRY id="ActionText.Description.AI_ConfigureChainer">    <STRING value="ActionText.Description.AI_ConfigureChainer"/>    <STRING value=""/>    <STRING value=""/>    <STRING value=""/>  </ENTRY></DICTIONARY>`)    err := xml.Unmarshal(b, &dict)    if err != nil { panic(err) }    fmt.Println(dict) // prints: {{ DICTIONARY}   []}    dict.ignore = "test"    out, err := xml.MarshalIndent(&dict, "  ", "    ")    fmt.Println(string(out)) // prints:   <DICTIONARY></DICTIONARY>    // huh?}
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

您需要导出(大写)您的结构字段。

encoding/xml Marshall功能文档:

结构的 XML 元素包含结构的每个导出字段的编组元素

有关相关答案,请参阅无法在 golang 中解析复杂的 json


查看完整回答
反对 回复 2021-06-28
  • 1 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信