Golang Парсинг XML, как создать произвольный type?

Здравствуйте, подскажите пожалуйста, пытаюсь парсить XML, использую "encoding/xml"все Ок,
хочу сделать более динамичной, чтоб пользователь указывал расположение ветки
Есть вот такая структура
type XMLShop struct {
	XMLName xml.Name `xml:"shop"`
	Name string `xml:"name"`
	Company string `xml:"company"`
	Url string `xml:"url"`
	Categories []*XMLShopCategories `xml:"categories>category"`
}

Как мне программно менять вот эти значение `xml:"shop"` `xml:"name"`
Спасибо!
  • Вопрос задан
  • 2392 просмотра
Решения вопроса 1
Можно делать вот так https://play.golang.org/p/TANUVIEQA2

package main

import (
	"encoding/xml"
	"fmt"
)

type XMLShop struct {
	XMLName xml.Name    `xml:"shop"`
	Name    []NameField `xml:",any"`
	Company string      `xml:"company"`
	Url     string      `xml:"url"`
}

type NameField struct {
	XMLName xml.Name `xml:""`
	Value   string   `xml:",chardata"`
}

const data = `
<shop>
    <someOtherName>testname1</someOtherName>
    <custom_name>testname2</custom_name>
    <company>testcorp</company>
    <url>http://ya.ru</url>
</shop>
`

func main() {
	var shop XMLShop
	if err := xml.Unmarshal([]byte(data), &shop); err != nil {
		fmt.Println(err)
		return
	}
	for _, node := range shop.Name {
		if node.XMLName.Local == "custom_name" {
			fmt.Printf("Name: %+v\n", node.Value)
		}
	}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Вам необходима поддержка словарей. В самой структуре ничего не меняете. В файле, полученном от пользователя меняете кастомные названия полей на "правильные", делая подстановку из словаря.
Ответ написан
Ваш ответ на вопрос

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

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