Golang-仅解组特定的XML节点

Golang-仅解组特定的XML节点,go,Go,我目前正试图通过将一个现有项目转化为go来学习golang。 这涉及到处理XML数据。 到目前为止,关于取消编组的文档看起来不错,但我只需要处理XML的某些部分。 已经存在的项目正在使用xpath和xslt对此进行归档。 不幸的是,go似乎没有这个 文档中有以下示例: package main import ( "encoding/xml" "fmt" ) func main() { type Email struct { Where string `xml:"whe

我目前正试图通过将一个现有项目转化为go来学习golang。 这涉及到处理XML数据。 到目前为止,关于取消编组的文档看起来不错,但我只需要处理XML的某些部分。 已经存在的项目正在使用xpath和xslt对此进行归档。 不幸的是,go似乎没有这个

文档中有以下示例:

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {
type Email struct {
    Where string `xml:"where,attr"`
        Addr  string
    }
    type Address struct {
    City, State string
    }
    type Result struct {
    XMLName xml.Name `xml:"Person"`
        Name    string   `xml:"FullName"`
        Phone   string
        Email   []Email
        Groups  []string `xml:"Group>Value"`
        Address
    }
    v := Result{Name: "none", Phone: "none"}

    data := `
        <Person>
            <FullName>Grace R. Emlin</FullName>
            <Company>Example Inc.</Company>
            <Email where="home">
                <Addr>gre@example.com</Addr>
            </Email>
            <Email where='work'>
                <Addr>gre@work.com</Addr>
            </Email>
            <Group>
                <Value>Friends</Value>
                <Value>Squash</Value>
            </Group>
            <City>Hanga Roa</City>
            <State>Easter Island</State>
        </Person>
    `
    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        fmt.Printf("error: %v", err)
        return
    }
    fmt.Printf("XMLName: %#v\n", v.XMLName)
    fmt.Printf("Name: %q\n", v.Name)
    fmt.Printf("Phone: %q\n", v.Phone)
    fmt.Printf("Email: %v\n", v.Email)
    fmt.Printf("Groups: %v\n", v.Groups)
    fmt.Printf("Address: %v\n", v.Address)
}

据我记忆所及,Unmarshal以最少的解释将数据解码到您的结构中。无法对属性进行筛选。不过,在您自己的代码中实现这一点非常简单。这篇博文讨论了其中的一些问题。谢谢我已经设法使用了go的libxslt,因此我可以使用与现有项目中类似的工作流。@Hotte您能否通过提供答案并批准来描述您的解决方案?问题仍在等待回答。。。
Email   []Email  `xml:"Email[@where='home']"`