2010-07-27 2 views
8

Sto cercando di leggere un file XML in Go utilizzando il pacchetto xml (http://golang.org/pkg/xml/).Lettura del testo interno di un elemento XML mediante Go

Il mio problema è che non sono sicuro di come leggere il testo interno di un elemento. Carico il documento in xml.Parser e poi richiama parser.Token() per spostarmi nel file. I controllare quale il token utilizza il seguente:

token, err := parser.Token() 
if element, ok := token.(xml.StartElement); ok { 
    // process as a start element. I can read the element name and attributes here 
} 

if charData, ok := token.(xml.CharData); ok { 
    // process as text. How do I read the text data? 
} 

Il tipo xml.CharData è definito come:

type CharData []byte 

ma non riesco a utilizzare la variabile CharData come una matrice di byte da convertire in una stringa. L'unico metodo definito per CharData è quello di copiare il token, ma questo dà solo un'altra copia di una variabile CharData. Ho provato un paio di cose, ma non si compilano:

innerText := string(charData) 
innerText := string(charData[0:]) 
innerText := string(charData[0]) // this compiled but is not what I want 

C'è un altro modo per trattare la variabile xml.CharData come una fetta di byte?

risposta

4

In base alle specifiche della lingua, dovresti essere in grado di eseguire string([]byte(charData)).

[]byte ->string è un caso speciale per la conversione del tipo. Normalmente, il nuovo tipo e il tipo originale devono avere lo stesso tipo sottostante (ad esempio xml.CharData e [] byte)

+0

Incredibile, questo ha fatto il trucco. Ho continuato a sfogliare le specifiche del linguaggio per questo, ma non l'ho mai visto. Ora ho bisogno di sedermi e effettivamente leggere le specifiche in dettaglio. –