Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpXmCd 190 of 280 menu
◀ ▶

Текст элемента в разметке в Go

Текст между открывающим и закрывающим тегом элемента можно записать в поле структуры. Для этого в метке пишут запятую и слово chardata без отдельного имени элемента перед запятой.

Такой прием удобен, когда у узла нет вложенных тегов, а есть только строка внутри, например заголовок или имя файла. Сборка и разбор работают так же, ошибку проверяют после каждого шага.

Объявим элемент с одним текстовым полем и соберем его:

package main import ( "encoding/xml" "fmt" ) type Title struct { Text string `xml:",chardata"` } func main() { t := Title{Text: "hello"} data, err := xml.Marshal(t) if err != nil { fmt.Println("error") return } fmt.Println(string(data)) }

В байтах корневой тег Title обрамляет строку hello без дополнительного внутреннего элемента. Значение лежит прямо между границами тега.

Разберем текст с таким же содержимым обратно:

package main import ( "encoding/xml" "fmt" ) type Title struct { Text string `xml:",chardata"` } func main() { raw := []byte(`<Title>hello</Title>`) var t Title err := xml.Unmarshal(raw, &t) if err != nil { fmt.Println("error") return } fmt.Println(t.Text) }

Дана структура:

type Caption struct { Line string `xml:",chardata"` }

Соберите текст для подписи "go" и выведите байты как строку.

Дан текст:

raw := []byte(`<Caption>go</Caption>`)

Разберите его в Caption и выведите поле с текстом.

Дана структура:

type Note struct { Body string `xml:",chardata"` }

Скажите, появится ли отдельный внутренний тег для поля Body при сборке.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить