From: Laurent Foret (l.foret@korom.net)
Date: 26/06/2001 - 11:30
Je ne suis pas un pro en C++, loin de la, et j'ai pas tout compris ce que
vous voulez faire. Mais il y pas un probleme de visibilite entre les deux
elem definis dans chacune de vos deux methodes.
De plus ou est declare futurFather et comment est il initialisee ?
-------------------------------------
Laurent Foret
Service developpement
l.foret@korom.net
www.korom.net
> -----Message d'origine-----
> De : xml-tech-bounce@xmlfr.org [mailto:xml-tech-bounce@xmlfr.org]De la
> part de Benoit Lefevre
> Envoye : mardi 26 juin 2001 12:44
> A : xml-tech@xmlfr.org
> Objet : [xml-tech] Xerces C++ : problemes avec DOM_Node::appendChild
>
>
>
>
> Bonjour.
>
> J'ai un probleme avec un appel a la methode DOM_Node::appendChild.
> Cet appel me renvois une exception DOM_DOMException avec un
> code erreur de 3 (HIERARCHY_REQUEST_ERR).
>
> Voici le code qui me produit cette exception (lors de l'appel a
> AddSomthing):
>
> -------------------------------------------------
>
> // Cette methode fabrique un nouvel arbre DOM et l'utilise
> // au cours d'une operation d'initialisation.
> void myclass::AddSomething(Params ...)
> {
> // je recupere le DOM_Document sur lequel je travail
> // grace a une structure de donnee perso, et j'utilise ce
> // document pour fabriquer un nouvel objet DOM_Element.
> DOM_Element elem;
> elem =
> personalDataStructure.getUserData().getOwnerDocument().createEleme
> nt(DOMString("A_Tag"));
>
> // Une fois cet element cree je fabrique un DOM_TreeWalker pointant
> // sur cet element. Cette manipulation me permet de reutiliser une de
> // mes methode qui fonctionne avec des DOM_TreeWalker
> DOM_TreeWalker dtw;
> dtw = msg.getOwnerDocument().createTreeWalker(msg,
> ALL_EXCEPT_TEXT , NULL, false);
>
> // J'ajoute quelques attributs a l'element nouvellement cree.
> msg.setAttribute( DOMString("Att1") , DOMString("AttVal1") );
> msg.setAttribute( DOMString("Att2") , DOMString("AttVal2") );
> ...
>
> // finalement je fait appel a la fonction que je souhaite
> re-Utiliser.
> testAndAdd(dtw);
> }
>
>
>
>
> // Voici la fonction en question.
> void myclass::testAndAdd(DOM_TreeWalker &dtw)
> {
> // je recupere l'element precedement cree via le TreeWalker.
> DOM_Element elem = (DOM_Element &) dtw.getCurrentNode();
>
> // j'effectue quelques tests dessus.
> if( elem.getAttribute ...... )
> .....
>
> // finnalement si cet element n'a pas de parent, je l'ajoute
> a un Element
> // present dans ma classe.
> bool orphan = (elem.getParentNode() == NULL);
> if( orphan )
> {
> // Avant de faire appele a "appendChild" je test
> // la compatibilite pere / fils
> if( elem.getOwnerDocument() == futurFather.getOwnerDocument() )
> futurFather.appendChild(elem); /* L'EXCEPTION
> EST LEVE ICI */
> else
> {
> // Je leve une exception si il y a incompatibilite.
> throw MyException();
> exit(0);
> }
> }
> }
>
>
> -------------------------------------------------
>
>
> Si je me refere a la documentation de la methode
> DOM_Node::appendChild(), l'exception est leve :
>
> - soit parce que j'ai esseille d'inserer un mauvais type de
> noeud, ce qui n'est pas le cas.
>
> - soit parce que j'ai esseille d'ajouter un de ses ancetres au
> noeud pere. Ceci me semble egalement impossible car le
> noeud que j'esseille d'inserer est cree a la vole lors de
> l'appel a AddSomething. Il ne peut donc pas etre un ancetre
> valide du noeud pere.
>
> Si un pro de Xerces C++ a la moindre petite idee du pourquoi
> du comment, je suis preneur :).
>
> Cordialement.
>
> benoit lefevre.
>
>
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
> Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
>
> Cette liste est a votre disposition pour discuter en francais de
> tout sujet technique lie a XML.
>
> Pour resilier votre abonnement, envoyez un message contenant
> la commande "unsubscribe" a xml-tech-request@xmlfr.org
> (mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
>
>
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|