РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1147 of 1593 menu

Функция xml.NewEncoder

Функция xml.NewEncoder создает новый экземпляр кодировщика, который записывает XML-представление Go-значений в указанный выходной поток. В качестве параметра функция принимает объект, реализующий интерфейс io.Writer - это может быть, например, os.Stdout, bytes.Buffer или файл. Функция возвращает указатель на структуру Encoder, через которую можно кодировать данные с помощью метода Encode.

Синтаксис

func NewEncoder(w io.Writer) *Encoder

Пример

Давайте создадим кодировщик для вывода XML в стандартный вывод и закодируем простую структуру:

package main import ( "encoding/xml" "fmt" "os" ) type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` } func main() { p := Person{Name: "John", Age: 30} encoder := xml.NewEncoder(os.Stdout) encoder.Indent("", " ") err := encoder.Encode(p) if err != nil { fmt.Println("Error:", err) } }

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

<person> <name>John</name> <age>30</age> </person>

Пример

Кодировщик можно использовать для записи XML в буфер и последующего получения строки:

package main import ( "bytes" "encoding/xml" "fmt" ) type Book struct { XMLName xml.Name `xml:"book"` Title string `xml:"title"` Author string `xml:"author"` } func main() { b := Book{Title: "Go Programming", Author: "John Doe"} buf := new(bytes.Buffer) encoder := xml.NewEncoder(buf) encoder.Indent("", " ") err := encoder.Encode(b) if err != nil { fmt.Println("Error:", err) } fmt.Printf("%s", buf.String()) }

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

<book> <title>Go Programming</title> <author>John Doe</author> </book>

Пример

Кодировщик поддерживает сериализацию срезов и массивов, создавая множество элементов в XML:

package main import ( "bytes" "encoding/xml" "fmt" ) type Library struct { XMLName xml.Name `xml:"library"` Books []Book `xml:"book"` } type Book struct { Title string `xml:"title"` Year int `xml:"year"` } func main() { lib := Library{ Books: []Book{ {Title: "Book One", Year: 2020}, {Title: "Book Two", Year: 2021}, }, } buf := new(bytes.Buffer) encoder := xml.NewEncoder(buf) encoder.Indent("", " ") err := encoder.Encode(lib) if err != nil { fmt.Println("Error:", err) } fmt.Printf("%s", buf.String()) }

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

<library> <book> <title>Book One</title> <year>2020</year> </book> <book> <title>Book Two</title> <year>2021</year> </book> </library>

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

  • функцию xml.Marshal,
    которая преобразует Go-значение в XML-строку без записи в поток
  • функцию xml.Unmarshal,
    которая парсит XML-данные в Go-структуру
  • метод encoder.Encode,
    который выполняет кодирование Go-значения в XML
  • функцию xml.NewDecoder,
    которая создает декодер для чтения XML из потока
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить