我的XML看起来像这样:
<a> <b> <c> <d>TEXT</d> </c> </b> </a>
我知道如何通过xml.Unmarshal函数分隔此代码,但是有什么方法可以仅在一定深度下执行Unmarshal动作吗?例如,如果我想获取一个表示“ TEXT”的字符串并将其传递给另一个函数?我尝试给一个子字符集对象,但是它仍然尝试解析其余的XML …
我认为这就是您要问的(也请考虑您的评论)。
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
更新 :lanZG发表评论后
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>