Как извлечь несколько полей из XML-файла в golang - PullRequest
0 голосов
/ 28 сентября 2018

Учитывая следующий XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">
<zoo>
  <annimal id="1">
    <display-name>hyena</display-name>
  </annimal>
  <annimal id="2">
    <display-name>lion</display-name>
    <icon src="https://en.wikipedia.org/wiki/File:Lion_waiting_in_Namibia.jpg"/>
  </annimal>
  <annimal id="3">
    <display-name>zebra</display-name>
  </annimal>
</zoo>

Какой самый простой способ получить следующий вывод в golang?

1,hyena
2,lion,https://en.wikipedia.org/wiki/File:Lion_waiting_in_Namibia.jpg
3,zebra

1 Ответ

0 голосов
/ 28 сентября 2018

Обычно вы должны хотя бы что-то попробовать, прежде чем отправлять вопрос о переполнении стека, но, поскольку это одно из ваших первых сообщений, я не хочу быть грубым, поэтому вот полный ответ.

Использование стандартная библиотека xml вы можете сделать это очень легко.

Вот пример точно описанного вами поведения:

package main

import (
    "encoding/xml"
    "fmt"
    "log"
)

type Zoo struct {
    XMLName xml.Name `xml:"zoo"`

    Animals []Animal `xml:"animal"`
}

type Animal struct {
    XMLName xml.Name `xml:"animal"`
    ID      uint     `xml:"id,attr"`

    DisplayName DisplayName
    Icon        Icon
}

type DisplayName struct {
    XMLName xml.Name `xml:"display-name"`
    Value   string   `xml:",chardata"`
}

type Icon struct {
    XMLName xml.Name `xml:"icon"`
    Source  string   `xml:"src,attr"`
}

var data []byte = []byte(`
<zoo>
  <animal id="1">
    <display-name>hyena</display-name>
  </animal>
  <animal id="2">
    <display-name>lion</display-name>
    <icon src="https://en.wikipedia.org/wiki/File:Lion_waiting_in_Namibia.jpg"/>
  </animal>
  <animal id="3">
    <display-name>zebra</display-name>
  </animal>
</zoo>`)

func main() {
    var zoo Zoo
    if err := xml.Unmarshal(data, &zoo); err != nil {
        log.Fatal(err)
    }
    for _, animal := range zoo.Animals {
        fmt.Printf("%d,%s,%s\n", animal.ID, animal.DisplayName.Value, animal.Icon.Source)
    }
}

Выходы

1,hyena,
2,lion,https://en.wikipedia.org/wiki/File:Lion_waiting_in_Namibia.jpg
3,zebra,

Вы можете попробовать его на игровой площадке Golang

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...