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

Функция xml.Unmarshal

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

Синтаксис

err := xml.Unmarshal(data, &struct)

Пример

Давайте распарсим простой XML с тегом person, содержащим атрибуты и вложенные элементы:

package main import ( "encoding/xml" "fmt" ) type Person struct { XMLName xml.Name `xml:"person"` ID int `xml:"id,attr"` Name string `xml:"name"` Age int `xml:"age"` } func main() { data := []byte(` <person id="123"> <name>John Doe</name> <age>30</age> </person> `) var res Person err := xml.Unmarshal(data, &res) if err != nil { fmt.Println(err) return } fmt.Printf("ID: %d, Name: %s, Age: %d\n", res.ID, res.Name, res.Age) }

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

"ID: 123, Name: John Doe, Age: 30"

Пример

Распарсим XML со списком элементов, используя тег xml:"item" для маркировки:

package main import ( "encoding/xml" "fmt" ) type Item struct { XMLName xml.Name `xml:"item"` Name string `xml:"name"` Price float64 `xml:"price"` } type Catalog struct { XMLName xml.Name `xml:"catalog"` Items []Item `xml:"item"` } func main() { data := []byte(` <catalog> <item> <name>Laptop</name> <price>999.99</price> </item> <item> <name>Mouse</name> <price>25.50</price> </item> </catalog> `) var res Catalog err := xml.Unmarshal(data, &res) if err != nil { fmt.Println(err) return } for _, item := range res.Items { fmt.Printf("%s: $%.2f\n", item.Name, item.Price) } }

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

"Laptop: $999.99" "Mouse: $25.50"

Пример

Обработаем XML с пространствами имен, используя поле XMLName:

package main import ( "encoding/xml" "fmt" ) type Doc struct { XMLName xml.Name `xml:"http://example.com doc"` Body string `xml:"body"` } func main() { data := []byte(` <doc xmlns="http://example.com"> <body>Hello, XML namespace!</body> </doc> `) var res Doc err := xml.Unmarshal(data, &res) if err != nil { fmt.Println(err) return } fmt.Println(res.Body) }

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

"Hello, XML namespace!"

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

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