2010-07-27 21 views
8

Estoy tratando de leer un archivo XML en Go usando el paquete xml (http://golang.org/pkg/xml/).Leyendo el texto interno de un elemento XML usando Go

Mi problema es que no estoy seguro de cómo leer el texto interno de un elemento. Cargué el documento en el xml.Parser y luego llamé al analizador.Token() para moverme por el archivo. Puedo comprobar para ver lo que el testigo está utilizando el siguiente:

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? 
} 

El tipo xml.CharData se define como:

type CharData []byte 

pero me parece que no puede utilizar la variable charData como una matriz de bytes para convertir a una cadena. El único método definido para CharData es copiar el token, pero eso solo da otra copia de una variable CharData. He intentado algunas cosas pero no compilan:

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

¿Hay otra manera de tratar la variable xml.CharData como una rebanada de bytes?

Respuesta

4

Según la especificación de idioma, debería poder hacer string([]byte(charData)).

[]byte ->string es un caso especial para la conversión de tipo. Normalmente, el nuevo tipo y el tipo original deben tener el mismo tipo subyacente (es decir, xml.CharData y [] byte)

+0

Sorprendente, eso funcionó. Seguí escaneando las especificaciones de idioma para esto, pero nunca lo vi. Ahora tengo que sentarme y leer las especificaciones en detalle. –

Cuestiones relacionadas