Как распарсить XML в Go?

Господа, пытаюсь научиться парсить XML на Go. Вроде бы понял идею со структурами и Unmarshal, но "не выходит каменный цветок". Есть очень простой XML:
<RESPONSE>
    <OBJECT basetype="status" name="status" oid="1">
      <PROPERTY name="response-type">success</PROPERTY>
      <PROPERTY name="response-type-numeric">0</PROPERTY>
      <PROPERTY name="response">0f738648db95bb1f6ca37f6b8b5aafa8</PROPERTY>
      <PROPERTY name="return-code">1</PROPERTY>
    </OBJECT>
</RESPONSE>


Подскажите пожалуйста, как мне правильно написать для него структуры?
  • Вопрос задан
  • 4031 просмотр
Решения вопроса 1
https://play.golang.org/p/mC_B9Qzjvt5
package main

import (
	"encoding/xml"
	"fmt"
)

type Property struct {
	Name  string `xml:"name,attr"`
	Value string `xml:",chardata"`
}

type Object struct {
	Properties []Property `xml:"PROPERTY"`
	Basetype   string     `xml:"basetype,attr"`
	Name       string     `xml:"name,attr"`
	Oid        int        `xml:"oid,attr"`
}

type Response struct {
	XMLName xml.Name `xml:"RESPONSE"`
	Objects []Object `xml:"OBJECT"`
}

func main() {
	data := []byte(`<RESPONSE>
    <OBJECT basetype="status" name="status" oid="1">
      <PROPERTY name="response-type">success</PROPERTY>
      <PROPERTY name="response-type-numeric">0</PROPERTY>
      <PROPERTY name="response">0f738648db95bb1f6ca37f6b8b5aafa8</PROPERTY>
      <PROPERTY name="return-code">1</PROPERTY>
    </OBJECT>
</RESPONSE>`)

	var res Response
	err := xml.Unmarshal(data, &res)
	if err != nil {
		panic(err)
	}

	fmt.Printf("%+v\n", res)
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@noma
Напиши структуру.
Сделай обратную операцию - Marshal.
См. что получается - корректирую структуру - так разберешься.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы