当前位置:  开发笔记 > 编程语言 > 正文

使用Golang进行XML编组-具有相同节点名称的多个节点

如何解决《使用Golang进行XML编组-具有相同节点名称的多个节点》经验,为你挑选了1个好方法。

在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进行编组和解组的能力?



1> icza..:

要重复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
      
      
      
      
      
      
    
  

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有