我一定遗漏了一些非常明显的东西......我正在尝试解析一个简单的 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。
- 1 回答
- 0 关注
- 245 浏览
添加回答
举报
0/150
提交
取消