2010-09-11 2 views
18

Dire che ho questo formato XML:Come vengono analizzati gli attributi in Boost.PropertyTree?

<Widget type="SomeWidget" name="foo"> 
    <Event name="onmouseover"> 
     dostuff(); 
    </Event> 
</Widget> 

Come faccio a leggere gli attributi utilizzando Boost.PropertyTree?

+0

Esempio completo di codice qui: http://stackoverflow.com/a/14010792/438039 –

risposta

10

Se il problema è quello di ottenere gli attributi:

gli attributi di un elemento XML sono memorizzati nella sottochiave. Lì è un nodo figlio per attributo nel nodo attributo . L'esistenza del nodo non è garantita o è necessario quando non ci sono attributi .

Dal doc http://www.boost.org/doc/libs/1_44_0/doc/html/boost_propertytree/parsers.html#boost_propertytree.parsers.xml_parser

Quindi, solo ottenere da loro il tag xmlattr.

+0

Grazie mille. Come posso accedervi esattamente? Mi piacerebbe davvero vedere un esame. –

+1

'BOOST_FOREACH (ptree :: value_type & v, pt.get_child (" widget.xmlattr ")) attributes.insert (std :: make_pair (v.first.data(), v.second.data())' do? –

+0

Mi piacerebbe vedere un esempio che non usi BOOST_FOREACH.Per solo puro C++ 98? In caso contrario, C++ 11 andrebbe bene, ma non ideale.Una parte dell'apprendimento di una libreria sta visualizzando i tipi di dati in uso e nasconde automaticamente i dettagli dell'apprendimento – Mitch

50

Se XML ha tali contenuti:

<mode fullscreen="true">mode xxx</mode> 

Usa codice boost :: proprietà:

get<string>("mode.<xmlattr>.fullscreen") 

Oh sì, è brutto!

+1

' mod xxx' non sembra essere un xml ben formato. – ThomasMcLeod