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

Теги xml

Теги xml в Go используются для управления процессом сериализации и десериализации структур в формат XML. Они позволяют задавать имена элементов, атрибутов, управлять вложенностью и обрабатывать специальные случаи. Теги записываются в виде строки после типа поля в структуре и имеют формат `xml:"имя,опции"`, где имя определяет название элемента в XML, а опции задают дополнительное поведение.

Синтаксис

type StructName struct { FieldName string `xml:"elementName,attr"` }

Основной синтаксис тега состоит из имени элемента и опциональных опций, разделенных запятыми. Имя может быть опущено, тогда используется имя поля. Поддерживаются следующие опции: attr (поле становится атрибутом), chardata (поле становится текстовым содержимым), omitempty (поле пропускается, если его значение нулевое), any (поле содержит произвольные XML-данные).

Пример

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

package main import ( "encoding/xml" "fmt" ) type Person struct { XMLName xml.Name `xml:"person"` FirstName string `xml:"firstName"` LastName string `xml:"lastName"` Age int `xml:"age"` } func main() { p := Person{ FirstName: "John", LastName: "Doe", Age: 30, } res, err := xml.MarshalIndent(p, "", " ") if err != nil { fmt.Println("Error:", err) } fmt.Println(string(res)) }

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

"<person> <firstName>John</firstName> <lastName>Doe</lastName> <age>30</age> </person>"

Пример

Давайте рассмотрим использование опции attr для создания атрибутов XML:

package main import ( "encoding/xml" "fmt" ) type Product struct { XMLName xml.Name `xml:"product"` ID string `xml:"id,attr"` Name string `xml:"name"` Price float64 `xml:"price"` } func main() { prod := Product{ ID: "A123", Name: "Laptop", Price: 999.99, } res, err := xml.MarshalIndent(prod, "", " ") if err != nil { fmt.Println("Error:", err) } fmt.Println(string(res)) }

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

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

Пример

Использование опции omitempty для пропуска нулевых полей:

package main import ( "encoding/xml" "fmt" ) type Book struct { XMLName xml.Name `xml:"book"` Title string `xml:"title"` Author string `xml:"author,omitempty"` Year int `xml:"year,omitempty"` } func main() { book := Book{ Title: "Go Programming", } res, err := xml.MarshalIndent(book, "", " ") if err != nil { fmt.Println("Error:", err) } fmt.Println(string(res)) }

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

"<book> <title>Go Programming</title> </book>"

Пример

Использование опции chardata для работы с текстовым содержимым:

package main import ( "encoding/xml" "fmt" ) type TextElement struct { XMLName xml.Name `xml:"element"` Content string `xml:",chardata"` ID string `xml:"id,attr"` } func main() { el := TextElement{ Content: "Some text content", ID: "123", } res, err := xml.MarshalIndent(el, "", " ") if err != nil { fmt.Println("Error:", err) } fmt.Println(string(res)) }

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

"<element id=\"123\">Some text content</element>"

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

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