Доброго дня! Я недавно в Golang, поэтому прошу не бить сразу ногами. Я хочу распарсить XML файл, и получить набор данных для последующей записи в БД. Есть XML с примерной структурой:
<?xml version="1.0" encoding="UTF-8" ?>
<countries>
<country>
<code>CH</code>
<name>Schweiz</name>
<regions>
<region>
<code>10</code>
<name>Mittelland</name>
<subregions>
<subregion>
<code>11</code>
<name>Blah blah</name>
Код, который наговнокодил для разбора:
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
)
type Destination struct {
CountryCode string `xml:"code"`
CountryName string `xml:"name"`
RegionCode []int `xml:"regions>region>code"`
RegionName []string `xml:"regions>region>name"`
SubregionCode []int `xml:"regions>region>subregions>subregion>code"`
SubregionName []string `xml:"regions>region>subregions>subregion>name"`
}
type Destinations struct {
Destinations []Destination `xml:"country"`
}
func main() {
d := Destinations{}
data, _ := ioutil.ReadFile("xml/countryregion.xml")
err := xml.Unmarshal(data, &d)
if err != nil {
fmt.Printf("error: ", err)
return
}
for i, e := range d.Destinations {
fmt.Printf("Country: %s - %s\n", e.CountryCode, e.CountryName)
for ri, r := range d.Destinations[i].RegionCode {
fmt.Printf("Region: %d - %s\n", r, d.Destinations[i].RegionName[ri])
}
if len(d.Destinations[i].SubregionCode) != 0 {
for sri, sr := range d.Destinations[i].SubregionCode {
fmt.Printf("SubRegion: %d - %s, Parent region? \n", sr, d.Destinations[i].SubregionName[sri])
}
}
}
}
Всё хорошо, но как получить код региона, для подрегиона?
В итоге, хочу получить что-то подобное.
Если это регион (не подрегион):
[Код страны][Номер региона][Имя региона][Номер региона]
Если это подрегион:
[Код страны][Номер подрегиона][Имя подрегиона][Номер родительского региона]
В идеале, хотелось бы чтоб номера регионов шли по порядку.
Возможно есть куда более оптимальный и верный алгоритм разбора.
Прошу направить меня в нужное русло.... =)