Тип xml.CharData
Тип xml.CharData представляет собой символьные данные
(текстовое содержимое) внутри XML-элемента. Он используется
при парсинге XML-документов с помощью xml.Decoder.
xml.CharData хранит текст между открывающим и закрывающим
тегами элемента. В первый аргумент мы передаем байтовый срез
с символьными данными, который может быть преобразован в строку
для дальнейшей обработки.
Синтаксис
type CharData []byte
Пример использования при парсинге XML
Давайте распарсим XML-документ и извлечем символьные данные из элементов:
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func main() {
xmlData := `<root>
<name>John</name>
<age>30</age>
<city>New York</city>
</root>`
decoder := xml.NewDecoder(strings.NewReader(xmlData))
for {
token, err := decoder.Token()
if err != nil {
break
}
switch elem := token.(type) {
case xml.CharData:
data := strings.TrimSpace(string(elem))
if data != "" {
fmt.Printf("%q\n", data)
}
}
}
}
Результат выполнения кода:
"John"
"30"
"New York"
Пример преобразования CharData в строку
Давайте преобразуем xml.CharData в строку и выполним
с ней различные операции:
package main
import (
"encoding/xml"
"fmt"
)
func main() {
var data xml.CharData = []byte("Hello, World!")
str := string(data)
fmt.Printf("string: %q\n", str)
fmt.Printf("length: %d\n", len(str))
fmt.Printf("bytes: %v\n", []byte(data))
}
Результат выполнения кода:
"string: \"Hello, World!\""
"length: 13"
"bytes: [72 101 108 108 111 44 32 87 111 114 108 100 33]"
Пример работы с экранированными символами
Давайте обработаем символьные данные, содержащие специальные символы:
package main
import (
"encoding/xml"
"fmt"
)
func main() {
xmlData := `<data><Hello> & "World"</data>`
decoder := xml.NewDecoder(strings.NewReader(xmlData))
for {
token, err := decoder.Token()
if err != nil {
break
}
switch elem := token.(type) {
case xml.CharData:
unescaped := string(elem)
fmt.Printf("Оригинал: %q\n", unescaped)
}
}
}
Результат выполнения кода:
"Оригинал: \"<Hello> & \"World\"\""
Смотрите также
-
тип
xml.Name,
который представляет имя XML-элемента -
тип
xml.StartElement,
который представляет открывающий тег элемента -
тип
xml.EndElement,
который представляет закрывающий тег элемента -
тип
xml.Attr,
который представляет атрибут XML-элемента