我必须缺少一些确实显而易见的东西……我尝试ExampleUnmarshal()按照此处的示例来解析一个简单的XML文件:http : //golang.org/src/pkg/encoding/xml/example_test.go
ExampleUnmarshal()
正如您将在底部看到的那样,没有映射任何属性或子元素-方向- 元帅或反元帅。据我所知,这几乎与上述example_test.go中所做的事情完全相同(我唯一能看到的区别是该测试中的类型在该函数的范围内- 我尝试过,不做任何区分,并且它们使用的是子元素,而不是属性-除- 以外,id但按文档名称,attr应该可以正常工作)。
id
代码如下:
package main import ( "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 lang="en" value="ActionText.Description.AI_ConfigureChainer"/> <STRING lang="da" value=""/> <STRING lang="nl" value=""/> <STRING lang="fi" 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? }
您需要导出(大写)您的结构字段。
从encoding/xml Marshall功能文档:
encoding/xml
Marshall
结构的XML元素包含该结构的每个导出字段的编组元素