Est-ce que quelqu'un a du code pour parcourir les nœuds d'un sous-arbre dans TinyXML? IE: Étant donné un parent, parcourez tous ses enfants et tous les enfants de ses enfants?TinyXML Itérer sur une sous-arborescence
Répondre
La réponse de Begemoth me semble plutôt bonne.
Voici une version simplifiée de la méthode de TiXmlElement accept(), qui n'utilise pas un visiteur et prend place un TiXmlNode * comme paramètre: méthode
void TiXmlIterator::iterate(const TiXmlNode* el)
{
cout << "Iterating Node " << el->Value() << endl;
// More useful code here...
for (const TiXmlNode* node=el->FirstChild(); node; node=node->NextSibling())
{
iterate(node);
}
// And/Or here.
}
Le accept() prend un TiXmlVisitor comme paramètre et fait tout le itération pour vous, cependant. Et vous n'avez pas à l'appeler sur tout le document, juste le nœud racine du sous-arbre que vous voulez traverser. De cette façon, vous pouvez définir un comportement spécifique pour les sous-classes de TiXmlNode, en remplaçant les bonnes méthodes. Regardez l'implémentation de TiXmlPrinter dans TinyXml's source code pour un bon exemple de la façon dont c'est fait.
Dans le cas où vous ne voulez pas le faire, est un autre exemple ici:
bool MyTiXmlVisitor::Visit(const TiXmlText& text)
{
cout << "Visiting Text: " << text.Value() << endl;
return true; // This will ensure it keeps iterating
}
Ceci agira sur tous les éléments de texte dans la sous-arborescence du nœud que vous appelez accept() sur. Pour agir sur tous les éléments, remplacer les méthodes virtuelles restantes de TiXmlVisitor. Ensuite, dans le code où vous voulez itérer sur la sous-arborescence, procédez comme suit:
subtree_root_node->Accept(my_tixmlvisitor_object);
Vous pouvez utiliser l'implémentation de modèle de visiteur dans la bibliothèque. Créez une classe héritée de TiXmlVistor, remplacez les méthodes nécessaires telles que VisitElement, puis appelez la méthode Accept() pour un nœud particulier.
Pas tout à fait ce que je demandais – Raindog
Vous recherchez code réel. – Raindog
Le code TiXmlPrinter devrait être un bon point de départ. Y a-t-il quelque chose que vous vouliez faire à chaque nœud spécifiquement? – brak3000
Ok, édité ma réponse pour préciser ce que je et (je suppose) Begemoth signifiait. HTH. – brak3000