Тип xml.StartElement
Тип xml.StartElement представляет начальный элемент в XML-документе.
Он используется при парсинге XML с помощью декодера и содержит информацию
об имени элемента и его атрибутах. Поле Name хранит локальное имя
элемента и его пространство имен, а поле Attr содержит срез атрибутов
типа xml.Attr.
Структура типа
type StartElement struct {
Name Name
Attr []Attr
}
Поле Name имеет тип xml.Name, который содержит поля
Local (локальное имя элемента) и Space (пространство имен).
Поле Attr представляет собой срез атрибутов элемента.
Синтаксис создания
Создать экземпляр xml.StartElement можно с помощью литерала структуры,
указав имя и атрибуты элемента:
start := xml.StartElement{
Name: xml.Name{Local: "root"},
Attr: []xml.Attr{
{Name: xml.Name{Local: "id"}, Value: "123"},
},
}
Пример
Давайте создадим начальный элемент с именем "book" и атрибутами "id" и "author":
package main
import (
"encoding/xml"
"fmt"
)
func main() {
start := xml.StartElement{
Name: xml.Name{Local: "book"},
Attr: []xml.Attr{
{Name: xml.Name{Local: "id"}, Value: "1"},
{Name: xml.Name{Local: "author"}, Value: "John Doe"},
},
}
fmt.Printf("Element: %s, Attributes: %v\n", start.Name.Local, start.Attr)
}
Результат выполнения кода:
"Element: book, Attributes: [{ {id} 1} { {author} John Doe}]"
Пример
Продемонстрируем использование xml.StartElement при парсинге XML-данных
с помощью xml.Decoder. Мы будем читать XML-документ и извлекать
информацию о начальных элементах:
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func main() {
xmlData := `<library><book id="1"><title>Go Programming</title></book></library>`
decoder := xml.NewDecoder(strings.NewReader(xmlData))
for {
token, err := decoder.Token()
if err != nil {
break
}
switch se := token.(type) {
case xml.StartElement:
fmt.Printf("Found element: %s\n", se.Name.Local)
for _, attr := range se.Attr {
fmt.Printf(" Attribute: %s = %s\n", attr.Name.Local, attr.Value)
}
}
}
}
Результат выполнения кода:
"Found element: library"
"Found element: book"
" Attribute: id = 1"
Пример
Покажем, как использовать метод xml.StartElement.End для получения
соответствующего конечного элемента и метод xml.StartElement.Copy
для создания копии элемента:
package main
import (
"encoding/xml"
"fmt"
)
func main() {
start := xml.StartElement{
Name: xml.Name{Local: "root"},
Attr: []xml.Attr{
{Name: xml.Name{Local: "version"}, Value: "1.0"},
},
}
end := start.End()
fmt.Printf("End element: %s\n", end.Name.Local)
copyStart := start.Copy()
fmt.Printf("Copy of element: %s\n", copyStart.Name.Local)
fmt.Printf("Copy attributes: %v\n", copyStart.Attr)
}
Результат выполнения кода:
"End element: root"
"Copy of element: root"
"Copy attributes: [{ {version} 1.0}]"
Смотрите также
-
тип
xml.EndElement,
который представляет конечный тег XML-элемента -
тип
xml.Name,
который содержит имя элемента и его пространство имен -
тип
xml.Attr,
который представляет атрибут XML-элемента -
тип
xml.Decoder,
который используется для парсинга XML-данных