Golang 嵌套、重命名的 XML 属性

给定以下结构:


type book struct {

    XMLName xml.Name   `xml:"DailyAct"`

    Symbol     string  `xml:"TradeInstrId,attr"`

    EntityId   string  `xml:"EntityId,attr"`

    AssetClass string  `xml:"AssetClass,attr"`

    Open       int     `xml:"Open"`

    High       int     `xml:"High"`

    Low        int     `xml:"Low"`

    Close      int     `xml:"Close"`

    // Type      string `` //I'll leave this for another question

}

我当前的 XML:


  <DailyAct EntityId="foo" AssetClass="bar" TradeInstrId="Symbol" >

      <Open>2</Open>

      <High>3</High>

      <Low>1</Low>

      <Close>5</Close>

  </DailyAct>

但是,我需要重新调整结构的某些字段(或以另一种方式生成 xml)来实现:


<DailyAct EntityId="foo" AssetClass="bar" TradeInstrId="Symbol">

  <Open Price="2" Type="IND"/>

  <High Price="6" Type="IND"/>

  <Low Price="1" Type="IND"/>

  <Close Price="4" Type="IND"/>

</DailyAct>

但是我得到:&errors.errorString{s:"xml: DailyAct>Open chain not valid with Price,attr flag"} (actual)当我尝试像这样嵌套字段时:


type book struct {

    //...

    Open       int     `xml:"DailyAct>Open,Price,attr>"`

    //...

}

编辑: 我发现了这个讨论,同时在谷歌上搜索,所以我想要的东西目前可能不可行


海绵宝宝撒
浏览 195回答 1
1回答

SMILET

你是对的,目前这是不可能的。但是您可以使用子结构,例如type PriceType struct {&nbsp; &nbsp; Price int&nbsp; &nbsp; `xml:"Price,attr"`&nbsp; &nbsp; Type&nbsp; string `xml:"Type,attr"`}type Book struct {&nbsp; &nbsp; XMLName&nbsp; &nbsp; xml.Name&nbsp; `xml:"DailyAct"`&nbsp; &nbsp; Symbol&nbsp; &nbsp; &nbsp;string&nbsp; &nbsp; `xml:"TradeInstrId,attr"`&nbsp; &nbsp; EntityId&nbsp; &nbsp;string&nbsp; &nbsp; `xml:"EntityId,attr"`&nbsp; &nbsp; AssetClass string&nbsp; &nbsp; `xml:"AssetClass,attr"`&nbsp; &nbsp; Open&nbsp; &nbsp; &nbsp; &nbsp;PriceType `xml:"Open"`&nbsp; &nbsp; High&nbsp; &nbsp; &nbsp; &nbsp;PriceType `xml:"High"`&nbsp; &nbsp; Low&nbsp; &nbsp; &nbsp; &nbsp; PriceType `xml:"Low"`&nbsp; &nbsp; Close&nbsp; &nbsp; &nbsp; PriceType `xml:"Close"`}这里的例子http://play.golang.org/p/Ekd6Xf3miS
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go