2013-12-15 25 views
7

グループ属性:私は、私は両方の値を収集し、SubItemField要素の属性をすることができますかわからないGolang:両方のXML要素の値を解析し、私はこのようなXMLの構造を有する

<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> 

を、私のコードがあります以下のようなもの:

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

私は属性と値の両方を必要とするが、私は知っている値を取得する唯一の方法は、単に

SubItemField []float32 
を使用しています私のカスタムタイプの代わりに

私はxml.Unmarshal btwを使用しています。

ありがとうございました。

答えて

17

私は同じように、私は単にxml:",chardata"に一致する私の構造体の新しいプロパティを追加する必要がありましたので、それが見えること行う方法を自分自身を考え出し:私は、誰かがそこにはドキュメントがありませんまたはCoS役立つことを願って

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

これに関する例。

+0

"/ chmlata"はXML要素ではなく、文字データとして記述されています。 –

+0

混乱を避け、@SamWhitedのコメントを明確にするために " chardata "は単にxml要素の内部文字データを参照するため、xmlに書き込むときにはデータが文字として要素に書き込まれ、xmlから読み取られるときは文字として読み込まれるだけです。データをその型に強制することができれば、読み書きされるデータ型は問題になりません。 –

+0

おかげさまで、回顧すると混乱しました。私はちょうど "何もないドキュメント"が間違ったステートメントであることを指摘しようとしていた、それはエンコード/ XMLパッケージに記載されています。 –

関連する問題