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

Тип xml.Name

Тип xml.Name используется для представления имени XML-элемента или атрибута. Он содержит два поля: Space - пространство имен (URI) и Local - локальное имя без префикса. Этот тип часто применяется в структурах для управления маршалингом и анмаршалингом XML-данных. При обработке XML, xml.Name позволяет гибко работать с именами элементов, включая поддержку пространств имен.

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

type Name struct { Space string // пространство имен (URI) Local string // локальное имя }

Поле Space может быть пустой строкой, если элемент не принадлежит пространству имен. Поле Local всегда содержит имя элемента.

Синтаксис

Объявление поля с типом xml.Name в структуре:

type MyStruct struct { XMLName xml.Name `xml:"elementName"` Value string `xml:"value"` }

Для работы с именем элемента при маршалинге и анмаршалинге, тег xml определяет имя XML-элемента, соответствующего структуре.

Использование с анмаршалингом

Рассмотрим пример анмаршалинга XML-данных с использованием поля xml.Name:

package main import ( "encoding/xml" "fmt" ) type Document struct { XMLName xml.Name Content string `xml:",chardata"` } func main() { data := []byte(`<book>Go Programming</book>`) var doc Document err := xml.Unmarshal(data, &doc) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("Local: %s, Content: %s\n", doc.XMLName.Local, doc.Content) }

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

"Local: book, Content: Go Programming"

Использование пространств имен

При работе с XML-документами, использующими пространства имен, поле Space заполняется автоматически:

package main import ( "encoding/xml" "fmt" ) type Root struct { XMLName xml.Name Value string `xml:",chardata"` } func main() { data := []byte(`<ns:root xmlns:ns="http://example.com/ns">Hello</ns:root>`) var r Root err := xml.Unmarshal(data, &r) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("Space: %s, Local: %s, Value: %s\n", r.XMLName.Space, r.XMLName.Local, r.Value) }

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

"Space: http://example.com/ns, Local: root, Value: Hello"

Явное задание имени элемента

При маршалинге структуры, имя элемента может быть задано явно с помощью тега, или будет использовано имя структуры по умолчанию:

package main import ( "encoding/xml" "fmt" ) type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` } func main() { p := Person{Name: "John", Age: 30} data, err := xml.MarshalIndent(p, "", " ") if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(data)) }

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

"<person> <name>John</name> <age>30</age> </person>"

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

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