2013-12-15 4 views
7

ich eine XML-Struktur wie diese:Golang: Analysieren sowohl Wert XML-Elements und Attribute für Gruppen

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

Ich weiß nicht, wie ich beiden Werte sammeln kann und Attribute für die SubItemField Elemente, mein Code so etwas wie:

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

brauche ich beide Attribute und Werte, aber der einzige Weg, um Werte zu erhalten, die ich kenne, ist verwenden nur

SubItemField []float32 

anstelle meines benutzerdefinierten Typs. Ich benutze xml.Unmarshal BTW.

Irgendeine Idee?

Danke.

Antwort

17

Ich dachte mir, wie das zu tun, musste ich einfach eine neue Eigenschaft in meiner Struktur hinzuzufügen, die passen xml:",chardata" so sieht es aus wie:

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

ich, dass hoffe, dass jemand helfen kann cos es keine Dokumentation oder Beispiele dazu.

+0

Von den Godocs für encoding/xml: '- ein Feld mit Tag", chardata "wird als Zeichendaten geschrieben, nicht als XML-Element. –

+0

Um Verwirrung zu vermeiden und den @SamWhited-Kommentar zu klären ...", chardata "bezieht sich einfach auf die internen Zeichendaten des XML-Elements. Daher werden beim Schreiben in XML die Daten einfach als Zeichen in das Element geschrieben, und beim Lesen aus dem XML-Code wird es einfach als Zeichen gelesen. Der Datentyp, aus dem geschrieben oder gelesen wird, spielt keine Rolle, solange die Daten in diesen Typ umgewandelt werden können. –

+0

Danke, im Nachhinein war das verwirrend. Ich habe nur versucht, darauf hinzuweisen, dass "es gibt keine Dokumentation" war eine falsche Aussage, ist es in der Codierung/XML-Paket dokumentiert. –