我的XML看起来像这样:
<a>
<b>
<c>
<d>TEXT</d>
</c>
</b>
</a>
我知道如何通过xml.Unmarshal函数分离这段代码,但有没有办法只对某个深度执行Unmarshal操作?例如,如果我想获得一个字符串,表示&#34; TEXT&#34;并将其传递给另一个函数?我尝试给出一个子字符集对象,但它仍然试图解析其余的XML ...
答案 0 :(得分:7)
我认为这就是你要问的问题(也请考虑你的评论)。
package main
import (
"encoding/xml"
"fmt"
)
func main() {
type Result struct {
Value string `xml:"b>c>d"`
}
v := Result{"none"}
data := `
<a>
<b>
<c>
<d>TEXT</d>
</c>
</b>
</a>
`
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Printf("Value: %v\n", v.Value)
}
输出:
Value: TEXT
更新:在兰兹的评论之后
func main() {
type InnerResult struct {
Value string `xml:",innerxml"`
}
type Result struct {
B InnerResult `xml:"b"`
}
v := Result{InnerResult{"none"}}
data := `
<a>
<b>
<c>
<d>TEXT</d>
</c>
</b>
</a>
`
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Printf("Value: %v\n", v.B.Value)
}
输出:
Value:
<c>
<d>TEXT</d>
</c>
答案 1 :(得分:2)
您可以使用嵌套的xml标记,使xml.Unmarshal
以下是它的工作原理:http://play.golang.org/p/XtCX7Dh45u