41 votes

Boost PropertyTree : vérifiez si l'enfant existe

J'essaie d'écrire un analyseur XML, d'analyser le fichier XML dans un boost::property_tree et j'ai rencontré ce problème. Comment puis-je vérifier (rapidement) si un enfant d'une certaine propriété existe ?

Évidemment, je pourrais itérer sur tous les enfants en utilisant BOOST_FOREACH - cependant, n'y a-t-il pas une meilleure solution à cela ?

54voto

RobH Points 2136
optional< const ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
  // child node is missing
}

23voto

Michael Anderson Points 21181

Voici quelques autres alternatives :

 if( node.count("possibliy_missing") == 0 )
{
   ...
}

ptree::const_assoc_iterator it = ptree.find("possibly_missing");
if( it == ptree.not_found() )
{
   ...
}

7voto

Incluez ceci :

 #include <boost/optional/optional.hpp>

Supprimer les const :

 boost::optional< ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
  // child node is missing
}

1voto

Rich Points 87

Bien que ces solutions puissent sembler éviter d'itérer sur l'arborescence, gardez à l'esprit que sous les couvertures, elles font toujours exactement cela, donc vous rendez votre algorithme potentiellement n^2... si vous êtes préoccupé par les performances et que vous avez de la mémoire pour de rechange, vous pouvez utiliser un conteneur de carte pour des recherches rapides.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X