2013-12-15 17 views
7

Mam struktury XML tak:Golang: Przetwarza zarówno wartość elementu XML i atrybutów dla grup

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

nie wiem jak mogę zebrać obie wartości i atrybuty dla elementów SubItemField, mój kod jest coś takiego:

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

muszę oba atrybuty i wartości, ale to jedyny sposób, aby uzyskać wartości, które wiem, to wystarczy użyć

SubItemField []float32 

zamiast mojego niestandardowego typu. Używam xml.Unmarshal btw.

Każdy pomysł?

Dzięki.

Odpowiedz

17

wyobraziłem sobie, jak to zrobić, musiałem po prostu dodać nową właściwość w moim struktury, które odpowiadają xml:",chardata" tak to wygląda:

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

Mam nadzieję, że może pomóc ktoś cos nie ma dokumentacji lub przykłady na ten temat.

+0

Od Godocy do kodowania/xml: '- pole ze znacznikiem", chardata "jest zapisywane jako dane znakowe, a nie jako element XML." –

+0

Aby uniknąć nieporozumień i wyjaśnić komentarz @SamWhited ... ", chardata "odnosi się po prostu do wewnętrznych danych znakowych elementu xml, dlatego przy zapisie do xml dane są po prostu zapisywane w elemencie jako znaki, a podczas odczytywania z xml jest to proste czytanie jako znaki. Typ danych zapisywany lub odczytywany nie ma znaczenia, o ile dane mogą zostać przekształcone w ten typ. –

+0

Dziękuję, z perspektywy czasu, która była myląca. Chciałem tylko wskazać, że "nie ma dokumentacji" było błędnym stwierdzeniem, jest to udokumentowane w pakiecie encoding/xml. –

Powiązane problemy