2016-06-20 1 views
3

Я хотел бы сделать что-то вроде:комментариев в списках XML в ходе

<members> 
     <!-- It's a first group --> 
     <member>Whatever</member> 
     ... 
     <member>whatever</member> 
     <!-- It's a second group --> 
     <member>Whatever</member> 
     ... 
     <member>whatever</member> 
    </members> 

Есть ли способ сделать это с golang?

+2

Вы декодируете свой XML с помощью 'encoding/xml'? –

ответ

2

Вы можете сделать это двумя способами. Во-первых, вы можете прокомментировать часть более крупной структуры, которая встраивает членов и сделать его маршалу комментарий по каждый раз, когда член ранжированы:

type Members struct { 
    XMLName xml.Name `xml:"members"` 
    Members []CommentedMember 
} 

type CommentedMember struct { 
    Member 
    comment xml.Comment 
} 

func (cm CommentedMember) MarshalXML(e *xml.Encoder, start xml.StartElement) error { 
    if cm.comment != nil { 
     err := e.EncodeToken(cm.comment) 
     if err != nil { 
      return err 
     } 
    } 
    return e.Encode(cm.Member) 
} 

type Member struct { 
    XMLName xml.Name `xml:"member"` 
} 

Второй способ заключается в создании отдельного Comment типа и сделать свой Members-структуру содержат различные типы:

type Members2 struct { 
    XMLName xml.Name `xml:"members"` 
    Members []interface{} 
} 

type Comment string 

func (cm Comment) MarshalXML(e *xml.Encoder, start xml.StartElement) error { 
    if cm != "" { 
     return e.EncodeToken(xml.Comment(cm)) 
    } 
    return nil 
} 

type Member struct { 
    XMLName xml.Name `xml:"member"` 
} 

Вот как на детской площадке: https://play.golang.org/p/3n-xH1Zc-n.

+0

Это работа! Спасибо! – vporoshok

Смежные вопросы