如何使用xml golang std查找已知属性和标记的值。 LIB

时间:2018-04-16 22:03:27

标签: xml go

我正在解析像这样设置的http请求的正文:

<something>
...
<inner_something> 
...
<foo bar='VALUE_I_WANT'>
... 
</FOO >
...
</inner_something>
...
</something>

查找VALUE_I_WANT的惯用方法是什么?我可以使用解码器循环使用令牌吗?如何检查令牌是否为foo并获取属性栏? (这些名字是不变的)。这是使用std lib的唯一方法吗?没办法直接查询令牌?

1 个答案:

答案 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中的一个工作示例。