如何在Go中编组xml但忽略空字段

时间:2015-09-07 10:51:26

标签: go

如果我有一个结构,我希望能够使用(使用encoding / xml)在xml中进出Marhsal / Unmarshal - 我怎样才能打印空的属性?< / p>

package main

import (
    "encoding/xml"
    "fmt"
)

type MyThing struct {
    XMLName xml.Name `xml:"body"`
    Name    string   `xml:"name,attr"`
    Street  string   `xml:"street,attr"`
}

func main() {
    var thing *MyThing = &MyThing{Name: "Canister"}
    result, _ := xml.Marshal(thing)
    fmt.Println(string(result))
}

例如,请参阅http://play.golang.org/p/K9zFsuL1Cw

在上面的游乐场中,我不想写出空的 street 属性;我怎么能这样做?

1 个答案:

答案 0 :(得分:5)

omitempty字段上使用street标记。

来自Go XML package

  
      
  • 省略具有包括“omitempty”选项的标签的字段   如果字段值为空。空值为false,0,any   nil指针或接口值,以及任何数组,切片,映射或   长度为零的字符串。
  •   

如果您的例子:

package main

import (
    "encoding/xml"
    "fmt"
)

type MyThing struct {
    XMLName xml.Name `xml:"body"`
    Name    string   `xml:"name,attr"`
    Street  string   `xml:"street,attr,omitempty"`
}

func main() {
    var thing *MyThing = &MyThing{Name: "Canister"}
    result, _ := xml.Marshal(thing)
    fmt.Println(string(result))
}

Playground