我正在尝试从蛋白质数据库(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)
}
我看到我的问题与此处的其他问题非常相似(很快就会提供链接参考),但是那里给出的答案似乎不是我的解决方案,因为我的标签有点不同。
答案 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