2010-07-27 17 views
8

Próbuję odczytać plik XML w programie Go przy użyciu pakietu xml (http://golang.org/pkg/xml/).Czytanie wewnętrznego tekstu elementu XML za pomocą Go

Mój problem polega na tym, że nie jestem pewien, jak czytać wewnętrzny tekst elementu. Załaduję dokument do pliku xml.Parser, a następnie wywołuję funkcję parser.Token(), aby przejść przez plik. I sprawdzić, co token jest za pomocą następujących czynności:

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

Typ xml.CharData jest zdefiniowany jako:

type CharData []byte 

ale nie wydaje się użyć zmiennej charData jako tablica bajtów do przekonwertowania na ciąg znaków. Jedyną metodą zdefiniowaną dla CharData jest skopiowanie tokena, ale to tylko daje kolejną kopię zmiennej CharData. Próbowałem kilka rzeczy, ale nie kompilacji:

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

Czy istnieje inny sposób traktować zmienną xml.CharData jak kromka bajtów?

Odpowiedz

4
Na podstawie specyfikacji językowej powinieneś być w stanie wykonać string([]byte(charData)).

[]byte ->string to specjalny przypadek konwersji typu. Zwykle nowy typ i oryginalny typ muszą mieć ten sam podstawowy typ (tj. Xml.CharData i [] bajt).

+0

Niesamowite, to wystarczyło. Ciągle przeglądałem specyfikację językową, ale nigdy tego nie widziałem. Teraz muszę usiąść i dokładnie przeczytać specyfikację. –

Powiązane problemy