Функция xml.Marshal
Функция xml.Marshal преобразует структуру данных Go
в XML-строку. В первый параметр передается структура или
значение, которое нужно сериализовать. Вторым параметром
возвращается срез байтов и ошибка. При сериализации
имена полей структуры становятся именами XML-элементов,
а значения полей - содержимым этих элементов.
Синтаксис
data, err := xml.Marshal(v)
Пример
Давайте преобразуем структуру с полем Name
в XML-элемент:
package main
import (
"encoding/xml"
"fmt"
)
type Person struct {
Name string
}
func main() {
p := Person{Name: "John"}
res, err := xml.Marshal(p)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
"<Person>John</Person>"
Пример
Давайте преобразуем структуру с несколькими полями в XML с вложенными элементами:
package main
import (
"encoding/xml"
"fmt"
)
type Address struct {
City string
Country string
}
type User struct {
Name string
Age int
Address Address
}
func main() {
u := User{
Name: "Alice",
Age: 30,
Address: Address{
City: "New York",
Country: "USA",
},
}
res, err := xml.Marshal(u)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
"<User><Name>Alice</Name><Age>30</Age><Address><City>New York</City><Country>USA</Country></Address></User>"
Пример
Давайте преобразуем структуру с тегами XML для управления именами элементов и атрибутами:
package main
import (
"encoding/xml"
"fmt"
)
type Product struct {
XMLName xml.Name `xml:"product"`
ID int `xml:"id,attr"`
Name string `xml:"name"`
Price float64 `xml:"price"`
}
func main() {
prod := Product{
ID: 1001,
Name: "Laptop",
Price: 999.99,
}
res, err := xml.Marshal(prod)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
"<product id=\"1001\"><name>Laptop</name><price>999.99</price></product>"
Смотрите также
-
функцию
xml.MarshalIndent,
которая выполняет сериализацию с форматированием -
функцию
xml.Unmarshal,
которая преобразует XML-данные обратно в структуру -
тип
xml.Encoder,
который позволяет записывать XML в поток -
тип
xml.Decoder,
который позволяет читать XML из потока