Имя элемента в разметке в Go
Метка поля с ключом xml задает имя
элемента в тексте, отличное от имени поля
в Go. Без метки для экспортируемого поля
имя элемента совпадает с именем поля,
а корневой тег берут из имени типа структуры.
Сборка превращает значение в байты текста, разбор заполняет структуру по уже готовым байтам. Оба шага возвращают ошибку, которую проверяют до печати или дальнейшей работы.
Объявим пользователя с метками у полей и выведем собранный текст:
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string `xml:"name"`
Age int `xml:"age"`
}
func main() {
u := User{Name: "ann", Age: 20}
data, err := xml.Marshal(u)
if err != nil {
fmt.Println("error")
return
}
fmt.Println(string(data))
}
На экране фрагмент с тегами name
и age внутри корня User.
Имена внутренних элементов взяты из меток,
а не из имен полей в коде.
Разберем тот же текст обратно в структуру:
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string `xml:"name"`
Age int `xml:"age"`
}
func main() {
raw := []byte(`<User><name>ann</name><age>20</age></User>`)
var u User
err := xml.Unmarshal(raw, &u)
if err != nil {
fmt.Println("error")
return
}
fmt.Println(u.Name, u.Age)
}
Дана структура:
type Row struct {
Code int `xml:"code"`
Note string `xml:"note"`
}
Соберите текст для значения с кодом
7 и заметкой "ok" и выведите
его.
Дан текст:
raw := []byte(`<User><name>kim</name><age>30</age></User>`)
Разберите его в User с метками
как в примере и выведите имя с возрастом.
Дана структура:
type Pair struct {
Left int `xml:"left"`
Right int `xml:"right"`
}
Укажите имена элементов для обоих полей без запуска программы.