Тип xml.Attr
Тип xml.Attr представляет собой структуру, описывающую один атрибут
XML-элемента. Он содержит два поля: Name (тип xml.Name) -
имя атрибута с его пространством имен, и Value (тип string) -
значение атрибута. Этот тип используется при ручном разборе
XML-документов с помощью xml.Decoder, а также в структурах,
предназначенных для маршалинга и анмаршалинга.
Структура типа
type Attr struct {
Name Name
Value string
}
Поле Name содержит локальное имя атрибута и его пространство имен,
а поле Value хранит строковое значение атрибута.
Пример
Давайте создадим экземпляр xml.Attr и выведем его поля:
package main
import (
"encoding/xml"
"fmt"
)
func main() {
attr := xml.Attr{
Name: xml.Name{
Local: "id",
},
Value: "12345",
}
fmt.Println(attr.Name.Local)
fmt.Println(attr.Value)
}
Результат выполнения кода:
"id"
"12345"
Пример
Атрибуты могут иметь пространство имен. Давайте создадим атрибут с полным именем:
package main
import (
"encoding/xml"
"fmt"
)
func main() {
attr := xml.Attr{
Name: xml.Name{
Space: "http://example.com/ns",
Local: "version",
},
Value: "1.0",
}
fmt.Println(attr.Name.Space)
fmt.Println(attr.Name.Local)
fmt.Println(attr.Value)
}
Результат выполнения кода:
"http://example.com/ns"
"version"
"1.0"
Пример
Тип xml.Attr часто используется при работе с
xml.StartElement. Получим атрибуты из XML-элемента:
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func main() {
xmlData := `<book id="123" lang="en">Go Programming</book>`
decoder := xml.NewDecoder(strings.NewReader(xmlData))
for {
token, err := decoder.Token()
if err != nil {
break
}
switch element := token.(type) {
case xml.StartElement:
for _, attr := range element.Attr {
fmt.Printf("%s: %s\n", attr.Name.Local, attr.Value)
}
}
}
}
Результат выполнения кода:
"id: 123"
"lang: en"
Пример
При маршалинге структур в XML можно использовать теги для указания
атрибутов. Но тип xml.Attr также может быть использован
для динамической работы с атрибутами:
package main
import (
"encoding/xml"
"fmt"
)
func main() {
attrs := []xml.Attr{
{Name: xml.Name{Local: "id"}, Value: "user-001"},
{Name: xml.Name{Local: "active"}, Value: "true"},
}
start := xml.StartElement{
Name: xml.Name{Local: "user"},
Attr: attrs,
}
fmt.Println(start.Name.Local)
for _, attr := range start.Attr {
fmt.Printf("%s=%s ", attr.Name.Local, attr.Value)
}
}
Результат выполнения кода:
"user"
"id=user-001 active=true "
Смотрите также
-
тип
xml.Name,
который представляет имя XML-элемента или атрибута -
тип
xml.StartElement,
который содержит имя элемента и его атрибуты -
функцию
xml.Unmarshal,
которая преобразует XML-данные в структуру Go -
тип
xml.EndElement,
который представляет закрывающий тег XML-элемента