我正在解析像这样设置的http请求的正文:
<something>
...
<inner_something>
...
<foo bar='VALUE_I_WANT'>
...
</FOO >
...
</inner_something>
...
</something>
查找VALUE_I_WANT
的惯用方法是什么?我可以使用解码器循环使用令牌吗?如何检查令牌是否为foo并获取属性栏? (这些名字是不变的)。这是使用std lib的唯一方法吗?没办法直接查询令牌?
答案 0 :(得分:2)
您可以使用encoding/xml
包来解析数据。例如,定义表示XML数据的类型:
type Something struct {
InnerSomething struct {
Foo struct {
Bar string `xml:"bar,attr"`
} `xml:"foo"`
} `xml:"inner_something"`
}
type Result struct {
Something `xml:"something"`
}
然后解析数据:
func main() {
data := `
<something>
<inner_something>
<foo bar='VALUE_I_WANT'>test
</foo >
</inner_something>
</something>`
v := Result{}
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Printf("bar: %q", v.Something.InnerSomething.Foo.Bar)
}
请参阅https://golang.org/pkg/encoding/xml/。
Here是Go Playground中的一个工作示例。