Функция xml.NewDecoder
Функция xml.NewDecoder создает новый декодер, который читает XML-данные из переданного io.Reader. В качестве единственного параметра она принимает объект, реализующий интерфейс io.Reader, например, файл, сетевой сокет или строку, преобразованную в strings.Reader. Возвращает указатель на структуру xml.Decoder, с помощью которого можно последовательно читать XML-токены или сразу декодировать данные в структуру.
Синтаксис
func NewDecoder(r io.Reader) *Decoder
Пример
Базовый пример создания декодера из строки с XML:
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func main() {
xmlData := `<root><name>John</name><age>30</age></root>`
reader := strings.NewReader(xmlData)
decoder := xml.NewDecoder(reader)
fmt.Printf("%T", decoder)
}
Результат выполнения кода:
*xml.Decoder
Пример
Декодирование XML в структуру с использованием Decoder.Decode:
package main
import (
"encoding/xml"
"fmt"
"strings"
)
type Person struct {
XMLName xml.Name `xml:"root"`
Name string `xml:"name"`
Age int `xml:"age"`
}
func main() {
xmlData := `<root><name>Jane</name><age>25</age></root>`
decoder := xml.NewDecoder(strings.NewReader(xmlData))
var p Person
err := decoder.Decode(&p)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Name: %s, Age: %d", p.Name, p.Age)
}
Результат выполнения кода:
"Name: Jane, Age: 25"
Пример
Использование Decoder.DecodeElement для декодирования с настройками:
package main
import (
"encoding/xml"
"fmt"
"strings"
)
type Item struct {
Name string `xml:"name"`
Value int `xml:"value"`
}
func main() {
xmlData := `<root><item><name>Apple</name><value>50</value></item></root>`
decoder := xml.NewDecoder(strings.NewReader(xmlData))
// Поиск элемента <item>
for {
token, err := decoder.Token()
if err != nil {
break
}
switch se := token.(type) {
case xml.StartElement:
if se.Name.Local == "item" {
var item Item
decoder.DecodeElement(&item, &se)
fmt.Printf("Item: %s, Value: %d", item.Name, item.Value)
}
}
}
}
Результат выполнения кода:
"Item: Apple, Value: 50"
Смотрите также
-
функцию
xml.NewEncoder,
которая создает энкодер для записи XML -
функцию
xml.Unmarshal,
которая декодирует XML из среза байтов -
функцию
xml.Marshal,
которая кодирует структуру в XML -
метод
Decoder.Decode,
который читает следующий XML-элемент в структуру