如何在Go中编排XML但忽略空字段

10
如果我有一个结构体,我想使用encoding/xml将其转换为xml并进行反序列化 - 那么我该如何打印空属性?
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 在上面的游乐场中,我不想写出空的“街道”属性; 我该怎么做?
1个回答

12

street字段上使用omitempty标记。

根据Go XML包

  • 如果一个带有“omitempty”选项的标签中的字段值为空,则该字段将被省略。 空值可以是false、0、任何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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接