为了账号安全,请及时绑定邮箱和手机立即绑定

go中的xml列表中的注释

go中的xml列表中的注释

Go
手掌心 2022-01-17 19:56:07
我想做类似的事情:    <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做到这一点?
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

你可以通过两种方式做到这一点。首先,您可以将评论作为嵌入成员的更大结构的一部分,并使其在每次编组成员时编组评论:


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。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 229 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信