2013-12-15 6 views
7

ho una struttura XML come questa:Golang: Analizzare sia il valore dell'elemento XML e gli attributi per i gruppi

<RootLevel status="new" timestamp="1383259529" xmlns="http://someplace.com"> 
    <Item active="1" status="new" itemid="451254"> 
     <SubItem active="1" recent="false" usertext="No idea" id="78421"> 
      <SubItemField active="1" ready="no" type="1">1.4</SubItemField> 
      <SubItemField active="1" ready="yes" type="2">4.5</SubItemField> 
     </SubItem> 
    </Item> 
</RootLevel> 

Non so come ho potuto capire entrambi i valori e gli attributi per gli elementi SubItemField, il mio codice è qualcosa di simile:

type RootLEvel struct { 
    XMLName xml.Name `xml:"RootLevel"` 
    ... 
    Item []Item 
} 

type Item struct { 
    ... 
    SubItem []SubItem 
} 

type SubItem struct { 
    ... 
    SubItemField []SubItemField 
} 

type SubItemField struct { 
    Active bool `xml:"active,attr"` 
    Ready string `xml:"ready,attr"` 
} 

ho bisogno di entrambi gli attributi e valori, ma l'unico modo per ottenere i valori che so è semplicemente usare

SubItemField []float32 

anziché il mio tipo personalizzato. Sto usando xml.Unmarshal btw.

Qualche idea?

Grazie.

risposta

17

mi sono capito come fare, ho dovuto semplicemente ad aggiungere una nuova proprietà nel mio struct che corrispondono xml:",chardata" così sembra:

type SubItemField struct { 
    Value float32 `xml:",chardata"` 
    Active bool `xml:"active,attr"` 
    Ready string `xml:"ready,attr"` 
} 

Spero che possa aiutare qualcuno cos non v'è alcuna documentazione o esempi su questo.

+0

Da Godocs per encoding/xml: '- un campo con tag", chardata "è scritto come dati carattere, non come elemento XML. –

+0

Per evitare confusione e chiarire il commento di @SamWhited ...", chardata "si riferisce semplicemente ai dati di carattere interno dell'elemento xml, quindi quando si scrive in xml i dati vengono semplicemente scritti nell'elemento come caratteri, e quando vengono letti dall'xml è semplice da leggere come caratteri. Il tipo di dati scritti o letti non ha importanza finché i dati possono essere forzati in quel tipo. –

+0

Grazie, in retrospettiva, che è stato confuso. Stavo solo cercando di far notare che "non c'è documentazione" era un'affermazione errata, è documentata nel pacchetto encoding/xml. –

Problemi correlati