如何从Golang中的XML文件提取多个字段

时间:2018-09-28 03:22:03

标签: xml go

给出以下XML文件:

{
    "id": "5ba7fdf1c988bcbaf7398060";
    "nome": "Kathia",
    "cpf": "470.428.859-53",
    "rg": "25.876.962-8"
}

在golang中产生以下输出的最简单方法是什么?

<?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>

1 个答案:

答案 0 :(得分:0)

通常,您至少应该在Stack Overflow上发布问题之前至少尝试一些操作,但是由于这是您的第一篇文章之一,所以我不想太粗鲁,所以这里有一个完整的答案。

使用the standard xml library可以很容易地做到这一点。

以下是您所描述的行为的一个示例:

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 Playground

上尝试一下