2016-06-20 5 views
3

Ich mag wie etwas tun:Kommentare in XML-Listen in go

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

Gibt es eine Möglichkeit, dies mit golang zu tun?

+2

Dekodieren Sie Ihre XML mit 'encoding/xml'? –

Antwort

2

Sie können es auf zwei Arten tun. Zum einen können Sie einen Teil einer größeren Struktur Kommentar machen, die Mitglieder einbettet und es um einen Kommentar abzug ein Mitglied jedes Mal machen Marschall vermarshallten ist:

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"` 
} 

Der zweite Weg ist eine separate Comment Typ zu erstellen und Ihre Members Struktur machen verschiedene Typen enthalten:

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"` 
} 

Hier sind sowohl auf dem Spielplatz: https://play.golang.org/p/3n-xH1Zc-n.

+0

Es ist Arbeit! Vielen Dank! – vporoshok