Функция xml.Marshal

Функция xml.Marshal преобразует структуру данных Go в XML-строку. В первый параметр передается структура или значение, которое нужно сериализовать. Вторым параметром возвращается срез байтов и ошибка. При сериализации имена полей структуры становятся именами XML-элементов, а значения полей - содержимым этих элементов.

Синтаксис

godata, err := xml.Marshal(v)

Пример

Давайте преобразуем структуру с полем Name в XML-элемент:

gopackage 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))
}

Результат выполнения кода:

go"<Person>John</Person>"

Пример

Давайте преобразуем структуру с несколькими полями в XML с вложенными элементами:

gopackage 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))
}

Результат выполнения кода:

go"<User><Name>Alice</Name><Age>30</Age><Address><City>New York</City><Country>USA</Country></Address></User>"

Пример

Давайте преобразуем структуру с тегами XML для управления именами элементов и атрибутами:

gopackage 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))
}

Результат выполнения кода:

go"<product id=\"1001\"><name>Laptop</name><price>999.99</price></product>"

Смотрите также

  • функцию xml.MarshalIndent,
    которая выполняет сериализацию с форматированием
  • функцию xml.Unmarshal,
    которая преобразует XML-данные обратно в структуру
  • тип xml.Encoder,
    который позволяет записывать XML в поток
  • тип xml.Decoder,
    который позволяет читать XML из потока