Функция xml.MarshalIndent
Функция xml.MarshalIndent преобразует переданную структуру
или значение в XML-строку с отступами для удобочитаемости.
Она принимает три параметра: значение для сериализации,
префикс для каждой новой строки и строку отступа.
Возвращает срез байтов с XML-данными и ошибку,
если сериализация невозможна.
Синтаксис
xml.MarshalIndent(v any, prefix, indent string) ([]byte, error)
Пример ⁅n="sect"⁆
Выполним сериализацию структуры с отступом в два пробела:
package main
import (
"encoding/xml"
"fmt"
)
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
City string `xml:"city,omitempty"`
}
func main() {
p := Person{Name: "Alice", Age: 30}
res, err := xml.MarshalIndent(p, "", " ")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
"<person>
<name>Alice</name>
<age>30</age>
</person>"
Пример ⁅n="sect"⁆
Используем префикс для добавления отступов перед каждым тегом:
package main
import (
"encoding/xml"
"fmt"
)
type Item struct {
XMLName xml.Name `xml:"item"`
ID int `xml:"id"`
Value string `xml:"value"`
}
func main() {
items := []Item
res, err := xml.MarshalIndent(items, " ", " ")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
" <item>
<id>1</id>
<value>first</value>
</item>
<item>
<id>2</id>
<value>second</value>
</item>"
Пример ⁅n="sect"⁆
Обработка ошибки при попытке сериализовать недопустимый тип:
package main
import (
"encoding/xml"
"fmt"
)
func main() {
ch := make(chan int)
res, err := xml.MarshalIndent(ch, "", " ")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
"Error: xml: unsupported type: chan int"
Смотрите также
-
функцию
xml.Marshal,
которая выполняет сериализацию без форматирования -
функцию
xml.Unmarshal,
которая десериализует XML-данные в структуру -
функцию
json.MarshalIndent,
которая аналогично форматирует JSON-данные -
тип
xml.Encoder,
который позволяет сериализовать данные в потоковом режиме