c++ - Boost PropertyTree: compruebe si el niño existe
boost-propertytree (4)
Estoy tratando de escribir un analizador XML, analizando el archivo XML con un boost::property_tree
y me encontré con este problema. ¿Cómo puedo verificar (rápidamente) si existe un hijo de cierta propiedad?
Obviamente, podría iterar sobre todos los niños usando BOOST_FOREACH
, sin embargo, ¿no hay una mejor solución para esto?
Aquí hay algunas otras alternativas:
if( node.count("possibliy_missing") == 0 )
{
...
}
ptree::const_assoc_iterator it = ptree.find("possibly_missing");
if( it == ptree.not_found() )
{
...
}
Incluye esto:
#include <boost/optional/optional.hpp>
Eliminar la const
:
boost::optional< ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
// child node is missing
}
Si bien estas soluciones pueden parecer que evitan iterar sobre el árbol, solo tenga en cuenta que bajo las cubiertas todavía están haciendo exactamente eso, por lo que está haciendo su algoritmo potencialmente n ^ 2 ... si le preocupa el rendimiento y tiene memoria para repuesto, podrías usar un contenedor de mapas para búsquedas rápidas.
optional< const ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
// child node is missing
}