从
Docs
如果XML元素包含字符数据,则该数据为
结构字段的类型可以是[]byte或string。如果没有
这其实不是你想要的,你想要的是:
如果结构具有类型为[]byte的字段或带标记的字符串
那个领域的元素。其余的规则仍然适用。
所以,使用
innerxml
而不是
chardata
.
package main
import (
"encoding/xml"
"fmt"
)
func main() {
xr := &xmlResponse{}
if err := xml.Unmarshal([]byte(x), &xr); err != nil {
panic(err)
}
fmt.Printf("%+v", xr)
}
type xmlResponse struct {
//Title string `xml:"title,omitempty"`
Title struct {
Title string `xml:",innerxml" `
} `xml:"title,omitempty"`
}
var x = `<?xml version="1.0" encoding="utf-8"?>
<mytag version="1.0">
<title><bold>Go</bold> is a programming language. I repeat: <bold>Go</bold> is a programming language.</title>
</mytag>`
&{Title:{Title:<bold>Go</bold> is a programming language. I repeat: <bold>Go</bold> is a programming language.}}
Play