Renommer une balise XML [Résolu]

Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Dernière intervention
31 août 2008
- 29 oct. 2006 à 17:45 - Dernière réponse :
Messages postés
5
Date d'inscription
vendredi 13 octobre 2006
Dernière intervention
21 mai 2007
- 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 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 29 oct. 2006 à 21:44
3
Merci
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-

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 29 oct. 2006 à 20:40
0
Merci
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
Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Dernière intervention
31 août 2008
- 29 oct. 2006 à 21:10
0
Merci
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
Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Dernière intervention
31 août 2008
- 29 oct. 2006 à 22:04
0
Merci
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
Messages postés
5
Date d'inscription
vendredi 13 octobre 2006
Dernière intervention
21 mai 2007
- 4 déc. 2006 à 15:55
0
Merci
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
Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Dernière intervention
31 août 2008
- 4 déc. 2006 à 16:10
0
Merci
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
Messages postés
5
Date d'inscription
vendredi 13 octobre 2006
Dernière intervention
21 mai 2007
- 4 déc. 2006 à 17:01
0
Merci
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
Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Dernière intervention
31 août 2008
- 4 déc. 2006 à 17:54
0
Merci
Oui sauf que la propriété Name est en lecture-seule.

Mathmax
Commenter la réponse de cs_mathmax
Messages postés
5
Date d'inscription
vendredi 13 octobre 2006
Dernière intervention
21 mai 2007
- 5 déc. 2006 à 08:25
0
Merci
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.