XML unmarshal无法正常工作第一个元素
问题描述:
我正试图解组XML。XML unmarshal无法正常工作第一个元素
type XMLCSFP struct {
Version string `xml:"version,attr"`
}
type XMLCS struct {
Container XMLCSFP `xml:"container"`
}
v2 := XMLCS{}
data := `
<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
<rootfiles>
<rootfile full-path="EPUB/package.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
`
err = xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)
它没有显示我的版本1.0
。结构的值是nil
但是,当我用div
容器包装xml。它工作正常。
data := `
<div>
<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
<rootfiles>
<rootfile full-path="EPUB/package.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
</div>
`
第一个问题是什么?谢谢!
答
XML的根元素被解组到所提供的指针的类型中。在你的情况下,这是XMLCS
。由于version
是根元素的一个属性,因此它将进入XMLCS
中的名为version
的字段(如果存在)。
因此改变,因为下方的结构应该解决的问题,
type XMLCS struct {
XMLName string `xml:"container"`
Version string `xml:"version,attr"`
}
阅读documentation of Marshal对XML是如何映射到结构的细节。