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

Атрибут элемента в разметке в Go

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

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

Объявим запись с числовым идентификатором в атрибуте и соберем текст:

package main import ( "encoding/xml" "fmt" ) type Entry struct { ID int `xml:"id,attr"` Name string `xml:"name"` } func main() { e := Entry{ID: 5, Name: "ann"} data, err := xml.Marshal(e) if err != nil { fmt.Println("error") return } fmt.Println(string(data)) }

У корня Entry в открывающем теге появляется пара id="5", а имя остается дочерним элементом name. Поле ID не дает отдельного тега id с телом внутри.

Разберем текст с тем же атрибутом:

package main import ( "encoding/xml" "fmt" ) type Entry struct { ID int `xml:"id,attr"` Name string `xml:"name"` } func main() { raw := []byte(`<Entry id="5"><name>ann</name></Entry>`) var e Entry err := xml.Unmarshal(raw, &e) if err != nil { fmt.Println("error") return } fmt.Println(e.ID, e.Name) }

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

type File struct { Kind string `xml:"kind,attr"` Path string `xml:"path"` }

Соберите текст для файла с видом "txt" и путем "main.go" и выведите результат.

Дан текст:

raw := []byte(`<Entry id="9"><name>kim</name></Entry>`)

Разберите его в Entry как в примере и выведите идентификатор с именем.

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

type Tag struct { Code int `xml:"code,attr"` Text string `xml:"text"` }

Скажите, где окажется значение поля Code после сборки: в атрибуте или во вложенном теге.

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