Тип xml.StartElement

Тип xml.StartElement представляет начальный элемент в XML-документе. Он используется при парсинге XML с помощью декодера и содержит информацию об имени элемента и его атрибутах. Поле Name хранит локальное имя элемента и его пространство имен, а поле Attr содержит срез атрибутов типа xml.Attr.

Структура типа

gotype StartElement struct {
  Name Name
  Attr []Attr
}

Поле Name имеет тип xml.Name, который содержит поля Local (локальное имя элемента) и Space (пространство имен). Поле Attr представляет собой срез атрибутов элемента.

Синтаксис создания

Создать экземпляр xml.StartElement можно с помощью литерала структуры, указав имя и атрибуты элемента:

gostart := xml.StartElement{
  Name: xml.Name{Local: "root"},
  Attr: []xml.Attr{
    {Name: xml.Name{Local: "id"}, Value: "123"},
  },
}

Пример

Давайте создадим начальный элемент с именем "book" и атрибутами "id" и "author":

gopackage 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)
}

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

go"Element: book, Attributes: [{ {id} 1} { {author} John Doe}]"

Пример

Продемонстрируем использование xml.StartElement при парсинге XML-данных с помощью xml.Decoder. Мы будем читать XML-документ и извлекать информацию о начальных элементах:

gopackage 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)
      }
    }
  }
}

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

go"Found element: library"
"Found element: book"
"  Attribute: id = 1"

Пример

Покажем, как использовать метод xml.StartElement.End для получения соответствующего конечного элемента и метод xml.StartElement.Copy для создания копии элемента:

gopackage 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)
}

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

go"End element: root"
"Copy of element: root"
"Copy attributes: [{ {version} 1.0}]"

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

  • тип xml.EndElement,
    который представляет конечный тег XML-элемента
  • тип xml.Name,
    который содержит имя элемента и его пространство имен
  • тип xml.Attr,
    который представляет атрибут XML-элемента
  • тип xml.Decoder,
    который используется для парсинга XML-данных