2 votes

Passage d'un DOMNode* à un DOMElement* dans Xerces-C

J'ai une application c++ qui manipule du xml. Eh bien, à un certain point de mon application, j'obtiens un DOMNode* et je l'attache à un élément comme enfant.

Le problème est que je voudrais ajouter des paramètres à ce noeud... c'est un noeud et non un élément... seuls les éléments ont des paramètres...

Voici mon code :

xercesc::DOMNode* node = 0;
std::string xml = from_an_obj_of_mine.GetXml(); /* A string with xml inside, the xml is sure an element having something inside */
xercesc::MemBufInputSource xml_buf((const XMLByte*)xml.c_str(), xml.size(), "dummy");
xercesc::XercesDOMParser* parser = new xercesc::XercesDOMParser();
parser->parse(xml_buf); /* parser will contain a DOMDocument well parsed from the string, I get here the node i want to attach */
node = my_pointer_to_a_preexisting_domdocument->GetXmlDocument()->importNode(parser->getDocument()->getDocumentElement(), true); /* I want to attach the node in parser to a node of my_pointer_to_an_el_of_my_preexisting_domdocument, it is a different tree, so I must import the node to attach it later */
my_pointer_to_an_el_of_my_preexisting_domdocument->appendChild(node);

Comme vous pouvez le voir, je veux créer un nœud à partir d'une chaîne de caractères, je le crée par le biais d'une analyse syntaxique et je dois ensuite importer le nœud pour créer un nouveau nœud identique appartenant à l'arbre dom où je veux attacher le nouveau nœud. Mes étapes sont les suivantes :

  • Obtenez la chaîne xml à attacher à un dom préexistant (stocké comme un domdocument quelque part)

  • Créer un analyseur syntaxique

  • En utilisant le parser, créez un arbre dom à partir de la chaîne de caractères

  • À partir de mon domaine préexistant (où je veux attacher mon nouveau nœud), appelez l'importation et clonez le nœud. afin qu'il puisse être attaché au domaine préexistant.

  • Attachez-le

Le problème est que l'importation et l'importation me donne un noeud... Je veux un élément à attacher...

J'utilise appendChild pour ajouter des éléments aussi... bien sûr la méthode veut DOMNode* mais lui donner un DOMElement* (qui hérite de DOMNode) est correct...

Comment obtenir un élément à partir d'un nœud ??? supprimer wd_parser ;

6voto

Andry Points 3390

Ok je l'ai découvert...

Il suffit de refondre le noeud en élément et le tour est joué... DOMNode est une classe virtuelle pure et elle est le parent de DOMElement... donc c'est correct et c'est aussi la façon de faire les choses (logiquement parlant).

DOMElement* = dynamic_cast<DOMElement*>(node);

:)

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