如何在Go中处理嵌套的XML标签?

时间:2013-12-13 18:28:07

标签: xml go

我正在尝试从蛋白质数据库(pdb)解组查询响应。我一直在阅读Go的XML编码包,并了解如何处理标签,但我不知道如何处理嵌套标签。我得到以下代码的输出(剪切);

 <PDBdescription> 
 <PDB structureId="4HHB"....
 </PDBdescription>

如何获取structureId的信息?因为它似乎连接到PDB-tag,它在PDBdescription-tag中?

// pdbRequest
package main

import (
    "fmt"
    "net"
    "encoding/xml"
    //"strings"
)

type PDB struct {
    id    string   `xml:"PDBdescription">"PDB structureId"`
    XMLName xml.Name 
}

func main() {
    conn, err := net.Dial("tcp", "www.rcsb.org:http")
    p := PDB{id:"NONE"}
    if err != nil {
        return
    }
    fmt.Fprintf(conn, "GET /pdb/rest/describePDB?structureId=4hhb HTTP/1.0\r\n\r\n")
    status := make([]byte, 10000)
    conn.Read(status)
    xml.Unmarshal([]byte(status), &p)
    fmt.Println(string(status))
    fmt.Println(p.id)
}

我看到我的问题与此处的其他问题非常相似(很快就会提供链接参考),但是那里给出的答案似乎不是我的解决方案,因为我的标签有点不同。

1 个答案:

答案 0 :(得分:4)

标记结构字段时,您需要使用,attr修饰符。例如:

type PDB struct {
    StructureId string `xml:"structureId,attr"`
}

type root struct {
    Pdb PDB `xml:"PDBdescription>PDB"`
}

如果您解码为root个实例,structureId属性将被解码为嵌套的Pdb.StructureId字段。

不幸的是,此时您无法将链接语法与,attr修饰符组合在一起,因此您需要一个嵌套的结构。

以下是一个工作示例:http://play.golang.org/p/VhUBKKLfk4