在 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
}
我尝试解组一个 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
}