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

Arrays 在go中解组xml时忽略空数组元素,arrays,xml,go,unmarshalling,Arrays,Xml,Go,Unmarshalling,我尝试解组一个xml数组,其中我想省略空元素 我希望下面的代码打印2,因为第二个bar元素是空的。取而代之的是打印3 package main import ( "fmt" "encoding/xml" "bytes" ) type foo struct { Bars []string `xml:"bar,omitempty"` } func main() { xmlStr := ` <foo> &

我尝试解组一个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))
}
主程序包
进口(
“fmt”
“编码/xml”
“字节”
)
类型foo struct{
bar[]字符串`xml:“bar,省略为空”`
}
func main(){
xmlStr:=`
1.
2.
`
福娃
NewDecoder(bytes.NewBufferString(xmlStr)).Decode(&f)
fmt.Println(长度(f.bar))
}

转到操场链接:

除非您想进入
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
}

我曾想过做类似的事情,但我认为
省略empty
应该开箱即用。我最终只是做了上面的事情。
省略empty
只有在
中没有
时才有效。