Boost Property_Tree itérateurs, comment les gérer?
Je suis désolé, j'ai posé une question sur le même sujet avant, mais mon problème concerne un autre aspect de celui qui y sont décrits (Comment itérer un coup de pouce...).
Prendre un coup d'oeil au code suivant:
#include <iostream>
#include <string>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/algorithm/string/trim.hpp>
int main(int argc, char** argv) {
using boost::property_tree::ptree;
ptree pt;
read_xml("try.xml", pt);
ptree::const_iterator end = pt.end();
for (ptree::const_iterator it = pt.begin(); it != end; it++)
std::cout << "Here " << it->? << std::endl;
}
Bien, comme je l'ai dit a dit dans la question, je l'ai mentionné, il ya la possibilité d'utiliser des itérateurs sur property_tree
en Boost, mais je ne sais pas de quel type il est, et quelles sont les méthodes ou propriétés que je peux utiliser.
Bien, je suppose que ça doit être une autre ptree
ou quelque chose qui représente une autre hiérarchie xml être consultée à nouveau (si je veux), mais la documentation à ce sujet est très mauvais. Je ne sais pas pourquoi, mais en boost docs je ne trouve rien de bon, juste quelque chose sur une macro pour parcourir les nœuds, mais cette approche est celle que je voudrais vraiment éviter.
Donc arriver à ma question ici: une Fois l'obtention de l'itérateur sur un ptree
, comment puis-je accéder nom du nœud, de la valeur des paramètres (un nœud dans un fichier xml)?
Merci
OriginalL'auteur Andry | 2011-01-04
Vous devez vous connecter pour publier un commentaire.
Je suis d'accord avec Andry, et trouver de la documentation de property_tree être extrêmement minime, à tout le moins. J'avais besoin de ptree pour le chargement d'objets identiques avec des paramètres différents, et avait de la difficulté à déterminer ce que l'itérateur parcourt, le type la retourne, et si oui ou non elle va rester sur les objets de niveau, ou de passer par chaque nœud BFS-comme. Enfin, j'ai réussi à obtenir mon code de travail pour un cas semblable à la suivante:
fichier de paramètres:
Tout d'abord, j'ai ajouté un constructeur pour mon objet, qui peut initialiser un ptree. Notez que je suis à l'aide de l'obtenir avec l'option par défaut, pour éviter d'exception sur échec de get()'s:
Enfin le code suivant charge à la fois les objets, et les place dans une carte:
Donc, pour répondre à mes propres questions:
first
etsecond
accesseurs.v.first
est un std::chaîne de caractères contenant le nœud parent (dans mon cas "objet1", "objet2"), etv.second
est unboost::property_tree::ptree
, qui peut être utilisé pour analyser les champs de l'objet.Cheers mate.
OriginalL'auteur bavaza
d'impression complète de l'arbre:
tnx. C'était bien, donc je l'ai insérée.
OriginalL'auteur Andriy Tylychko
Vous devez avoir la connaissance préalable sur l'entrée de la propriété de fichier.
Boost propriété de l'arbre n'est pas un document général de l'analyseur. Il le fera d'analyse et de donner l'accès aux données, mais doit rechercher manuellement.
Je ne sais pas il y a des méthode pour naviguer à travers tout le document, mais si vous avez uniquement besoin les propriétés de votre fichier vous pouvez le faire avec un code très simple.
De la stimuler la documentation:
1) Le fait de lancer la version (get):
2) La valeur par défaut de la valeur de la version de (se):
3) La version optionnelle (get_optional):
OriginalL'auteur 9dan