Golang,将xml解析为struct?

时间:2016-10-17 20:50:32

标签: go xml-parsing

我有这样的xml文档,我需要获取一个DATA数组。我无法解决这个简单的任务4小时....想回到node.js: - )

<?xml version="1.0" standalone="no"?>
<RETS ReplyCode="0" ReplyText="Operation Successful" >
<COUNT Records="58951" />
<DELIMITER value="09"/>
<COLUMNS>   LN  </COLUMNS>
<DATA>  09361303    </DATA>
<DATA>  09333085    </DATA>
<MAXROWS/>

type DATA struct {
    DATA string `xml:"DATA"`
}

type Rets struct {
    DATA []DATA `xml:"RETS>DATA"`
}


data := &Rets{}
decoder := xml.Unmarshal(body,&data)

fmt.Println(decoder)

2 个答案:

答案 0 :(得分:2)

来自xml.Unmarshal docs

  
      
  • 如果XML元素包含字符数据,那么该数据就是   累积在第一个具有标记&#34;,chardata&#34;的结构域中。   struct字段可以具有type [] byte或string。   如果没有这样的字段,则丢弃字符数据。
  •   

使用

type DATA struct {
    DATA string `xml:",chardata"`
}

type Rets struct {
    DATA []DATA `xml:"DATA"`
}

或者在这个简单的例子中,你可以使用

type Rets struct {
    DATA []string `xml:"DATA"`
}

默认情况下从元素列表中收集charadata

答案 1 :(得分:0)

有一些工具可以将XML转换为Go结构。 zek是一种适合阅读的语言,尽管它是实验性的,但它已经可以处理几个常见的XML构造。

您可以使用简单的命令从XML fileraw)转到结构:

$ curl -sL https://git.io/fN4Pq | zek -e -p -c

这将创建一个结构加上一个example program来测试编组(该示例做得很少,它从stdin读取XML并将其转换为JSON)。

这是一个示例结构(用于一些来自this repo的XML):

// RETS was generated 2018-09-07 12:11:10 by tir on apollo.local.
type RETS struct {
    XMLName       xml.Name `xml:"RETS"`
    Text          string   `xml:",chardata"`
    ReplyCode     string   `xml:"ReplyCode,attr"`
    ReplyText     string   `xml:"ReplyText,attr"`
    METADATATABLE struct {
        Text     string   `xml:",chardata"`
        Resource string   `xml:"Resource,attr"`
        Class    string   `xml:"Class,attr"`
        Version  string   `xml:"Version,attr"`
        Date     string   `xml:"Date,attr"`
        COLUMNS  string   `xml:"COLUMNS"` // MetadataEntryID    SystemNam...
        DATA     []string `xml:"DATA"`    // 7  City        City    Ci ...
    } `xml:"METADATA-TABLE"`
}

免责声明:我写了zek。

相关问题