Renommer une balise XML [Résolu]

cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 29 oct. 2006 à 17:45 - Dernière réponse : dyca370370 5 Messages postés vendredi 13 octobre 2006Date d'inscription 21 mai 2007 Dernière intervention
- 5 déc. 2006 à 08:25
Bonjour,
Auriez-vous une méthode pour renommer une balise d'un XmlDocument ?

merci d'avance.
Mathmax
Afficher la suite 

9 réponses

Répondre au sujet
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 29 oct. 2006 à 21:44
+3
Utile
Pour faire un Clone, y'a toujours les méthodes Clone et CloneNode, je ne sais pas exactement si ça peut faire ce dont tu as besoin.
Sinon, tu seras effectivement obligé d'écrire une méthode du genre RenameNode que tu as posté ci-dessus.

-Blog-
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Bidou
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 29 oct. 2006 à 20:40
0
Utile
Salut,
Je ne pense pas que ça puisse se faire directement (je ne suis pas tout à faire sûr).
Le cas échéant, il faut supprimer le Node et en recréer un avec le bon nom.

-Blog-
Commenter la réponse de cs_Bidou
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 29 oct. 2006 à 21:10
0
Utile
c'est aussi ce que je pensais faire : une copie du nouveau node avec un nouveau nom. J'ai écris cette méthode :

        public void RenameNode(XmlNode node, string newName)
        {
            XmlElement newNode;
            newNode = doc.CreateElement(newName);
            newNode.InnerXml = node.InnerXml;
            foreach (XmlAttribute attribute in node.Attributes)
                node.Attributes.Append(attribute);
            node.ParentNode.InsertBefore(newNode, node);
        }

penses-tu qu'elle suffise à copier dans le nouveu noeud toutes les propriétés de l'ancien ? (à part le nom)
Mathmax
Commenter la réponse de cs_mathmax
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 29 oct. 2006 à 22:04
0
Utile
ok merci. Ca marche. Voilà le code de me méthode (j'avais fais quelques erreurs) :
       
    public void RenameNode(XmlNode node, string newName)
        {
            XmlElement newNode;
            newNode = doc.CreateElement(newName);
            newNode.InnerXml = node.InnerXml;
            foreach (XmlAttribute attribute in node.Attributes)
            {
                XmlAttribute newAttribute = (XmlAttribute)attribute.Clone();
                newNode.Attributes.Append(newAttribute);
            }
            node.ParentNode.ReplaceChild(newNode, node);
        }

Mathmax
Commenter la réponse de cs_mathmax
dyca370370 5 Messages postés vendredi 13 octobre 2006Date d'inscription 21 mai 2007 Dernière intervention - 4 déc. 2006 à 15:55
0
Utile
J'arrive après la bataille, mais j'utilise un bout de code ci-dessous qui me permet de modifier d'un coup tous les éléments qui ont un attribut "id" avec une fonction (nouvelId) qui me retourne un code alpha aléatoire.
Il suffit de remplacer mon xPath (.//@id) par un qui va bien.
Espérant que ça serve à qq'un...
Dyca

XmlNodeList listeId = noeudXml.SelectNodes(".//@id");
//renommage des attributs id
foreach (XmlNode n in listeId) n.Value = nouvelId(unchecked((int)DateTime.Now.Ticks));
Commenter la réponse de dyca370370
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 4 déc. 2006 à 16:10
0
Utile
Merci dyca370370, mais là tu modifie la  valeur des noeuds (qui dans ton cas sont d'ailleurs des attributs) alors que je voulais modifier le nom des balises. Ma fonction là haut marche bien, par contre je doute qu'elle soit rapide...

Mathmax
Commenter la réponse de cs_mathmax
dyca370370 5 Messages postés vendredi 13 octobre 2006Date d'inscription 21 mai 2007 Dernière intervention - 4 déc. 2006 à 17:01
0
Utile
Tu as entièrement raison, mais là où je dis n.value, il faut dire n.Name.
Et ma chaine xPath doit être qqchose comme ".//TOTO" pour remplacer les balises TOTO qui sont en dessous du noeud de référence.
Bonne soirée
Dyca
Commenter la réponse de dyca370370
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 4 déc. 2006 à 17:54
0
Utile
Oui sauf que la propriété Name est en lecture-seule.

Mathmax
Commenter la réponse de cs_mathmax
dyca370370 5 Messages postés vendredi 13 octobre 2006Date d'inscription 21 mai 2007 Dernière intervention - 5 déc. 2006 à 08:25
0
Utile
Oups, excuse-moi!
Le innerXml est donc la bonne solution...
Dyca
Commenter la réponse de dyca370370

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.