Метод xml.Encoder.Encode
Метод xml.Encoder.Encode выполняет сериализацию переданных данных в формат XML
и записывает результат в выходной поток, связанный с экземпляром xml.Encoder.
В качестве аргумента метод принимает произвольное значение типа any.
Обычно это структура с тегами xml, управляющими формированием элементов и атрибутов.
При успешной записи метод возвращает nil, в противном случае — ошибку.
Синтаксис
err := encoder.Encode(v)
Пример
Создадим структуру Person, заполним её данными и сериализуем в XML-строку
с помощью xml.Encoder.Encode:
package main
import (
"bytes"
"encoding/xml"
"fmt"
)
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
}
func main() {
p := Person{
Name: "John",
Age: 30,
}
var buf bytes.Buffer
enc := xml.NewEncoder(&buf)
enc.Indent("", " ")
err := enc.Encode(p)
if err != nil {
fmt.Printf("error: %v\n", err)
return
}
fmt.Println(buf.String())
}
Результат выполнения кода:
<person>
<name>John</name>
<age>30</age>
</person>
Пример
Покажем, как метод обрабатывает вложенные структуры и XML-атрибуты,
заданные через теги xml:
package main
import (
"bytes"
"encoding/xml"
"fmt"
)
type Address struct {
City string `xml:"city"`
Street string `xml:"street"`
}
type Employee struct {
XMLName xml.Name `xml:"employee"`
ID int `xml:"id,attr"`
FullName string `xml:"fullname"`
Address Address `xml:"address"`
}
func main() {
e := Employee{
ID: 1001,
FullName: "Jane Doe",
Address: Address{
City: "New York",
Street: "5th Ave",
},
}
var buf bytes.Buffer
enc := xml.NewEncoder(&buf)
enc.Indent("", " ")
err := enc.Encode(e)
if err != nil {
fmt.Printf("error: %v\n", err)
return
}
fmt.Println(buf.String())
}
Результат выполнения кода:
<employee id="1001">
<fullname>Jane Doe</fullname>
<address>
<city>New York</city>
<street>5th Ave</street>
</address>
</employee>
Смотрите также
-
функцию
xml.Marshal,
которая сериализует данные в XML и возвращает срез байт -
функцию
xml.MarshalIndent,
которая делает то же самое с отступами -
функцию
xml.Unmarshal,
которая десериализует XML в структуру Go -
тип
xml.Encoder,
который управляет всем процессом записи XML