OVH Cloud OVH Cloud

remplacement d'un noeud Xml

7 réponses
Avatar
Cool6a
Bonjour,
mon but c'est de remplacer le fils N3 du noeoud N1 par un frere N2 de ce
noeud N1 :
<pereDeN1>
<N1>
<N3>
</N1>
<N2/>
</pereDeN1>
But :
<pereDeN1>
<N1>
<N2>
</N1>
</pereDeN1>

j'ai écris le code suivant:
XmlNode NParent = N1.ParentNode;
XmlNode N2 = NParent.SelectSingleNode("la chaine xpath pour selectionner
N2");
XmlNode N3 = N1.SelectSingleNode("...");
N1.ReplaceChild(N2,N3);
NParent.RemoveChild(N2);

je reçoi l'erreur suivante :
Le noeud à supprimer n'est pas un enfant de ce noeud. at
System.Xml.XmlNode.ReplaceChild(XmlNode newChild,XmlNode oldChild).
Pourtant c'est son fils ADN à l'appui ;-) :
(N3 = N1.SelectSingleNode("...") c'est son fils non?!!)
Merci de m'aider.

7 réponses

Avatar
Ambassadeur Kosh
ben non, c plus son fils. puisque'il viens de sortir de l'arbre, Replace
gracia.
Avatar
Cool6a
le problème est dans replace elle meme, Cf le message d'erreur !!!
"Ambassadeur Kosh" a écrit dans le message de
news:
ben non, c plus son fils. puisque'il viens de sortir de l'arbre, Replace
gracia.




Avatar
Cool6a
Est que qq1 peut m'aider SVP? je suis bloqué :(

"Cool6a" a écrit dans le message de
news:
Bonjour,
mon but c'est de remplacer le fils N3 du noeoud N1 par un frere N2 de ce
noeud N1 :
<pereDeN1>
<N1>
<N3>
</N1>
<N2/>
</pereDeN1>
But :
<pereDeN1>
<N1>
<N2>
</N1>
</pereDeN1>

j'ai écris le code suivant:
XmlNode NParent = N1.ParentNode;
XmlNode N2 = NParent.SelectSingleNode("la chaine xpath pour selectionner
N2");
XmlNode N3 = N1.SelectSingleNode("...");
N1.ReplaceChild(N2,N3);
NParent.RemoveChild(N2);

je reçoi l'erreur suivante :
Le noeud à supprimer n'est pas un enfant de ce noeud. at
System.Xml.XmlNode.ReplaceChild(XmlNode newChild,XmlNode oldChild).
Pourtant c'est son fils ADN à l'appui ;-) :
(N3 = N1.SelectSingleNode("...") c'est son fils non?!!)
Merci de m'aider.






Avatar
Fred
Dans le message:,
Cool6a écrit :
Est que qq1 peut m'aider SVP? je suis bloqué :(

"Cool6a" a écrit dans le message de
news:
Bonjour,
mon but c'est de remplacer le fils N3 du noeoud N1 par un frere N2
de ce noeud N1 :
<pereDeN1>
<N1>
<N3>
</N1>
<N2/>
</pereDeN1>
But :
<pereDeN1>
<N1>
<N2>
</N1>
</pereDeN1>

j'ai écris le code suivant:
XmlNode NParent = N1.ParentNode;
XmlNode N2 = NParent.SelectSingleNode("la chaine xpath pour
selectionner N2");
XmlNode N3 = N1.SelectSingleNode("...");
N1.ReplaceChild(N2,N3);
NParent.RemoveChild(N2);

je reçoi l'erreur suivante :
Le noeud à supprimer n'est pas un enfant de ce noeud. at
System.Xml.XmlNode.ReplaceChild(XmlNode newChild,XmlNode oldChild).
Pourtant c'est son fils ADN à l'appui ;-) :
(N3 = N1.SelectSingleNode("...") c'est son fils non?!!)
Merci de m'aider.





Bonjour,
A mon avis, le problème vient du fait que ton newChild est 'attaché' à ton
parent.
Le message me semble plus lié au noeud N2 (qui n'est pas un enfant de N1)
qu'au noeud N3.
Clone le et fait ton replace avec le clone pour voir.


--
Fred
Avatar
Cool6a
Justement j'ai essayé avec N1.ReplaceChild(N2.Clone(),N3);
mais apparement le problème n'est pas là ! je reçoi tjr la même erreur


"Fred" a écrit dans le message de
news:
Dans le message:,
Cool6a écrit :
> Est que qq1 peut m'aider SVP? je suis bloqué :(
>
> "Cool6a" a écrit dans le message de
> news:
>> Bonjour,
>> mon but c'est de remplacer le fils N3 du noeoud N1 par un frere N2
>> de ce noeud N1 :
>> <pereDeN1>
>> <N1>
>> <N3>
>> </N1>
>> <N2/>
>> </pereDeN1>
>> But :
>> <pereDeN1>
>> <N1>
>> <N2>
>> </N1>
>> </pereDeN1>
>>
>> j'ai écris le code suivant:
>> XmlNode NParent = N1.ParentNode;
>> XmlNode N2 = NParent.SelectSingleNode("la chaine xpath pour
>> selectionner N2");
>> XmlNode N3 = N1.SelectSingleNode("...");
>> N1.ReplaceChild(N2,N3);
>> NParent.RemoveChild(N2);
>>
>> je reçoi l'erreur suivante :
>> Le noeud à supprimer n'est pas un enfant de ce noeud. at
>> System.Xml.XmlNode.ReplaceChild(XmlNode newChild,XmlNode oldChild).
>> Pourtant c'est son fils ADN à l'appui ;-) :
>> (N3 = N1.SelectSingleNode("...") c'est son fils non?!!)
>> Merci de m'aider.

Bonjour,
A mon avis, le problème vient du fait que ton newChild est 'attaché' à ton
parent.
Le message me semble plus lié au noeud N2 (qui n'est pas un enfant de N1)
qu'au noeud N3.
Clone le et fait ton replace avec le clone pour voir.


--
Fred




Avatar
Fred
Dans le message:%23PREP$,
Cool6a écrit :
Justement j'ai essayé avec N1.ReplaceChild(N2.Clone(),N3);
mais apparement le problème n'est pas là ! je reçoi tjr la même erreur


"Fred" a écrit dans le message de
news:
Dans le message:,
Cool6a écrit :
Est que qq1 peut m'aider SVP? je suis bloqué :(

"Cool6a" a écrit dans le message de
news:
Bonjour,
mon but c'est de remplacer le fils N3 du noeoud N1 par un frere N2
de ce noeud N1 :
<pereDeN1>
<N1>
<N3>
</N1>
<N2/>
</pereDeN1>
But :
<pereDeN1>
<N1>
<N2>
</N1>
</pereDeN1>

j'ai écris le code suivant:
XmlNode NParent = N1.ParentNode;
XmlNode N2 = NParent.SelectSingleNode("la chaine xpath pour
selectionner N2");
XmlNode N3 = N1.SelectSingleNode("...");
N1.ReplaceChild(N2,N3);
NParent.RemoveChild(N2);

je reçoi l'erreur suivante :
Le noeud à supprimer n'est pas un enfant de ce noeud. at
System.Xml.XmlNode.ReplaceChild(XmlNode newChild,XmlNode oldChild).
Pourtant c'est son fils ADN à l'appui ;-) :
(N3 = N1.SelectSingleNode("...") c'est son fils non?!!)
Merci de m'aider.





Bonjour,
A mon avis, le problème vient du fait que ton newChild est 'attaché'
à ton parent.
Le message me semble plus lié au noeud N2 (qui n'est pas un enfant
de N1) qu'au noeud N3.
Clone le et fait ton replace avec le clone pour voir.


--
Fred





Et en faisant ton RemoveChild d'abord ?
N2 = NParent.RemoveChild(N2)
N1.ReplaceChild(N2, N3)

Je pense vraiment que le problème est dû au fait que tu veux remplacer un
noeud par un autre qui n'est pas libre.

--
Fred
Avatar
Cool6a
J'ai tout essayé, en fin un truc qui a marché, c'est que j'ai remplacé le
"Replace()" par un "Remove()+Insert()" et ça a marché ;-) !!!!!

"Fred" a écrit dans le message de
news:
Dans le message:%23PREP$,
Cool6a écrit :
> Justement j'ai essayé avec N1.ReplaceChild(N2.Clone(),N3);
> mais apparement le problème n'est pas là ! je reçoi tjr la même erreur
>
>
> "Fred" a écrit dans le message de
> news:
>> Dans le message:,
>> Cool6a écrit :
>>> Est que qq1 peut m'aider SVP? je suis bloqué :(
>>>
>>> "Cool6a" a écrit dans le message de
>>> news:
>>>> Bonjour,
>>>> mon but c'est de remplacer le fils N3 du noeoud N1 par un frere N2
>>>> de ce noeud N1 :
>>>> <pereDeN1>
>>>> <N1>
>>>> <N3>
>>>> </N1>
>>>> <N2/>
>>>> </pereDeN1>
>>>> But :
>>>> <pereDeN1>
>>>> <N1>
>>>> <N2>
>>>> </N1>
>>>> </pereDeN1>
>>>>
>>>> j'ai écris le code suivant:
>>>> XmlNode NParent = N1.ParentNode;
>>>> XmlNode N2 = NParent.SelectSingleNode("la chaine xpath pour
>>>> selectionner N2");
>>>> XmlNode N3 = N1.SelectSingleNode("...");
>>>> N1.ReplaceChild(N2,N3);
>>>> NParent.RemoveChild(N2);
>>>>
>>>> je reçoi l'erreur suivante :
>>>> Le noeud à supprimer n'est pas un enfant de ce noeud. at
>>>> System.Xml.XmlNode.ReplaceChild(XmlNode newChild,XmlNode oldChild).
>>>> Pourtant c'est son fils ADN à l'appui ;-) :
>>>> (N3 = N1.SelectSingleNode("...") c'est son fils non?!!)
>>>> Merci de m'aider.
>>
>> Bonjour,
>> A mon avis, le problème vient du fait que ton newChild est 'attaché'
>> à ton parent.
>> Le message me semble plus lié au noeud N2 (qui n'est pas un enfant
>> de N1) qu'au noeud N3.
>> Clone le et fait ton replace avec le clone pour voir.
>>
>>
>> --
>> Fred

Et en faisant ton RemoveChild d'abord ?
N2 = NParent.RemoveChild(N2)
N1.ReplaceChild(N2, N3)

Je pense vraiment que le problème est dû au fait que tu veux remplacer un
noeud par un autre qui n'est pas libre.

--
Fred