2010-09-11 14 views
18

Decir que tengo este formato XML:¿Cómo se analizan los atributos en Boost.PropertyTree?

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

¿Cómo se leen los atributos utilizando Boost.PropertyTree?

+0

Ejemplo de código completo aquí: http://stackoverflow.com/a/14010792/438039 –

Respuesta

10

Si su problema es conseguir atributos:

los atributos de un elemento XML son almacenada en la subclave. Hay es un nodo secundario por atributo en el nodo de atributo . La existencia del nodo no está garantizada o es necesario cuando no hay atributos .

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

Así que obtenerlos de la etiqueta xmlattr.

+0

Muchas gracias. ¿Cómo accedo exactamente? Realmente me gustaría ver un examen. –

+1

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

+0

Me encantaría ver una muestra que no utiliza BOOST_FOREACH. ¿Qué tal si solo C++ 98 puro? Si no, C++ 11 estaría bien también, pero no es ideal. Parte del aprendizaje de una biblioteca es ver los tipos de datos en uso y ocultarlos automáticamente los detalles de aprendizaje. – Mitch

50

Si XML ha dicho contenido:

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

Use el código de impulso :: propiedad:

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

Oh sí, es feo!

+1

' mod xxx' no parece estar bien formado xml. – ThomasMcLeod

Cuestiones relacionadas