在 go 中解组 xml 时省略空数组元素

Omitting empty array elements when unmarshalling xml in go

我尝试解组一个 xml 数组,我想在其中省略空元素。

我希望下面的代码打印 2,因为第二个 bar 元素是空的。而是打印 3。

package main

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

type foo struct {
    Bars []string `xml:"bar,omitempty"`
}

func main() {
    xmlStr := `
        <foo>
            <bar>1</bar>
            <bar></bar>
            <bar>2</bar>
        </foo>`

    var f foo
    xml.NewDecoder(bytes.NewBufferString(xmlStr)).Decode(&f)
    fmt.Println(len(f.Bars))
}

去游乐场link:https://play.golang.org/p/co8QxkyKTv

除非你想进入 xml.Unmarshaler 黑魔法,否则我建议你就去做

func compact(ss []string) []string {
    res := make([]string, 0, len(ss))
    for _, s := range ss {
        if s != "" {
            res = append(res, s)
        }
    }
    return res
}