在VAST规范中,一个XML文件可能包含几个具有相同名称的节点-例如,几个Impression
节点,它们的唯一不同id
。
考虑以下示例:
FT Flashtalking mobile vast template 2.0 date of revision 10-04-14 00:00:15
注意多个Impression
节点仅因其id
属性而有所不同(实际上,有时甚至是相同的)。
有没有一种方法可以用Golang表示这种结构,从而保持使用该encoding/xml
程序组对XML进行编组和解组的能力?
要重复XML标签,只需在Go中使用一个slice。
请参见以下简单示例,该示例处理您的XML输入,重点放在取消编组
标签,然后再次编组它们:
type Impression struct { Id string `xml:"id,attr"` Content string `xml:",chardata"` } type VAST struct { Impressions []Impression `xml:"Ad>InLine>Impression"` } func main() { v := &VAST{} if err := xml.Unmarshal([]byte(src), v); err != nil { panic(err) } fmt.Printf("%+v\n\n", v) if out, err := xml.MarshalIndent(v, "", " "); err != nil { panic(err) } else { fmt.Println(string(out)) } }
输出(已包装,请在Go Playground上尝试):
&{Impressions:[{Id:ft_vast_i Content:http://servedby.fla...[CUT]...1076585830} {Id:3rdparty Content:} {Id:3rdparty Content:} {Id:3rdparty Content:} {Id:3rdparty Content:} {Id:3rdparty Content:} {Id:3rdparty Content:}]}http://servedby.fla...[CUT]...1076585830