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

Список элементов в разметке в Go

Срез структур с общей меткой элемента дает несколько тегов подряд с одним и тем же именом. Каждый элемент среза становится отдельным узлом внутри родителя.

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

Объявим каталог с двумя позициями и соберем текст:

package main import ( "encoding/xml" "fmt" ) type Item struct { Name string `xml:"name"` } type Catalog struct { Items []Item `xml:"item"` } func main() { c := Catalog{ Items: []Item{ {Name: "a"}, {Name: "b"}, }, } data, err := xml.Marshal(c) if err != nil { fmt.Println("error") return } fmt.Println(string(data)) }

Внутри Catalog идут два блока item с разным содержимым. Имя item взято из метки у поля-среза, а не из имени типа Item.

Разберем текст с двумя пунктами обратно:

package main import ( "encoding/xml" "fmt" ) type Item struct { Name string `xml:"name"` } type Catalog struct { Items []Item `xml:"item"` } func main() { raw := []byte(`<Catalog><item><name>a</name></item><item><name>b</name></item></Catalog>`) var c Catalog err := xml.Unmarshal(raw, &c) if err != nil { fmt.Println("error") return } fmt.Println(len(c.Items), c.Items[1].Name) }

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

type Row struct { Val int `xml:"val"` } type Table struct { Rows []Row `xml:"row"` }

Соберите текст для таблицы с двумя строками со значениями 1 и 2 и выведите его.

Дан текст:

raw := []byte(`<Catalog><item><name>x</name></item><item><name>y</name></item></Catalog>`)

Разберите его в Catalog как в примере и выведите длину среза и имя второго пункта.

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

type Part struct { Code string `xml:"code"` } type List struct { Parts []Part `xml:"part"` }

Скажите, сколько элементов part появится при сборке, если в срезе три значения.

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