Libxml++ : find and dynamic_cast - C++ - Programmation
Marsh Posté le 29-07-2008 à 18:11:16
Finalement je m'en suis sorti !
En fait le find() ne renvoie pas un xmlpp::ContentNode mais un xmlpp::Element. On le dynamic_cast donc en xmlpp::Element et on the sert des méthodes getFirstChildText() pour récupérer le texte à l'intérieur.
Je ne trouve pas très logique cette façon de procéder, et ne comprends pas pourquoi on n'a pas pu caster directement en xmlpp::ContentNode mais cette solution fonctionne.
Salut !
Marsh Posté le 30-07-2008 à 07:05:08
ReplyMarsh Posté le 31-07-2008 à 20:14:25
Oui merci Joel F. Je me suis mal exprimé. Je n'ai pas compris la modélisation. En quoi la recherche d'un noeud devrait retourner un Element et non un node castable en contentNode par la suite.
Marsh Posté le 31-07-2008 à 20:26:29
vah ca, faut regarder le rationale du truc. L'idée princiaple est certainement - à raison - de séparé la structure en arbre de son contenu.
Marsh Posté le 31-07-2008 à 21:23:07
Joel F a écrit : tout simplement car ContentNode n'est pas une classe fille de Element. |
c'est UB dans ce cas là. Le dynamic_cast ça n'est pas magique, faut quand même faire gaffe à son utilisation.
Marsh Posté le 01-08-2008 à 16:54:56
Node
* ContentNode
* Element
Taz a écrit : |
Merci je connais le dynamic_cast mais la documentation ne précise pas que (cf http://libxmlplusplus.sourceforge. [...] 1Node.html ) :
xmlpp::NodeSet xmlpp::Node::find(std::string path)
retourne un ensemble de xmlpp::Element et non xmlpp::Node comme on (ou je) pourrait le croire. Je l'ai dit plus haut.
Le problème est que je ne comprends pas pourquoi on pourrait avoir des éléments plutôt que des Nodes.
Exemple : je cherche un node contenant du texte avec un XPath : le dynamic_cast me révèle que c'est un Element qui est instancié en résultat alors qu'on aurait pu croire que c'était un ContentNode.
Dans quels cas a-t-on un ContentNode ? Si ça n'arrive jamais pourquoi retourner un ensemble de Node (en réalité des Elements) plutot qu'un ensemble de Element ?
Marsh Posté le 22-07-2008 à 15:32:31
Bonjour a tous,
Je cherche à caster un xmlpp::Node en xmlpp::TextNode à la suite d'un find() mais je n'y arrive pas !
A l'execution, il affiche alors "Dynamic cast failed".
J'ai l'impression que libXMLpp n'instancie que des xmlpp::Node.
Je cherche simplement à retourner un text grâce à un XPath.
Info : libXML++-2.6
Merci d'avance.
Message édité par ekra le 22-07-2008 à 15:34:55