2013-12-13 2 views
1

Я пытаюсь отменить запрос ответа из базы данных белка (pdb). Я читал в пакете XML-кодировки Go и понимаю, как обрабатывать теги, но я не знаю, как обрабатывать вложенные теги. Я получаю вывод из кода ниже (вырез);Как обрабатывать вложенные теги XML в Go?

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

Как я могу получить информацию о структуре? похоже, что он связан с PDB-тегом, который находится в теге 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

XML в сторону, почему вы используете 'net.Dial' для запросов HTTP? – nemo

+1

Возможно, вам будет легче ответить на этот вопрос, если вы сделаете свой образец кода подходящим для игр. Вместо того, чтобы извлекать данные из URL-адреса, поместите некоторые данные примера в многострочную строку и передайте это в xml.Unmarshal. Затем поместите все это на play.golang.org и добавьте эту ссылку на свой вопрос. – MatrixFrog

+0

@nemo. Я просто предпочитаю использовать net.Dial для контакта с мышью «низкого уровня». – stian

ответ

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

+0

Большое вам спасибо, Джеймс. Я попробовал немного всего без решения. Я посмотрю на это как можно скорее. – stian

Смежные вопросы