2017-03-17 94 views
0

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

我期望以下代码打印2,因为第二个条元素是空的。而是打印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)) 
} 

转到操场链接:https://play.golang.org/p/co8QxkyKTv

+0

的'omitempty'只能如果没有' '在你的''里面。 – TheHippo

回答

0

除非你想进入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 
} 
+0

我正在考虑做这样的事情,但我认为'omitempty'应该照顾它开箱即用。 –

+0

我最终只是做了上面的事情。 –