IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

comment supprimer un attribut ou un element d un fichier xml


Sujet :

Visual C++

  1. #1
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut comment supprimer un attribut ou un element d un fichier xml
    pour ajouter un element il suffit de le cr�er lui associer des attributs puis ajouter avec :

    pour supprimer un element ou un attribut comment on fait c est la meme logique avec :

    merci

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    t'as essay� ? ca marche ?
    faut pas oublier de sauver le xml � la fin

  3. #3
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut
    justement j'ai essayer, il me genere cette exception comme quoi je suis pas au bon child
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    An unhandled exception of type 'System.ArgumentException' occurred in System.Xml.dll
     
    Additional information: The node to be removed is not a child of this node.
    pourtant ce que je fais je l ajoute avec append et je laisse le meme chemin (que pour append )comme ca je suis sur et je fais remove mais ca marche pas

  4. #4
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut
    voici mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    XmlDocument^doc1 = gcnew XmlDocument();
    doc1->Load("c:\\test30.xml");
    XmlNode^ elem21 = doc1->CreateNode(XmlNodeType::Element, "file", nullptr);
    elem21->InnerText = "file111";
    for each (XmlNode^xn in doc1->ChildNodes[0]->ChildNodes)
    {
         if((xn->Attributes["id"]->Value->ToString()=="1"))
         {			
              for each (XmlNode ^xcn in xn->ChildNodes)
              {
                    if(xcn->Name->ToString()=="roles")
                    {
                           for each (XmlNode ^xcn2 in xcn->ChildNodes)
                           {
                              if((xcn2->Attributes["id"]->Value->ToString()=="1"))
                              {
                                     for each (XmlNode ^xxx in xcn2->ChildNodes)
                                     {
                                         if((xxx->Name->ToString()=="users"))
                                         {
                                              System::Windows::Forms::MessageBox::Show(xxx->Name->ToString());
                                               for each (XmlNode ^xxxm in xxx->ChildNodes)
                                                {
                                                     if((xxxm->Name->ToString()=="user"))
                                                     {
                                                         if(xxxm->Attributes["login"]->Value->ToString()=="login11")
                                                         {
                                                              for each (XmlNode ^xxxmm in xxxm->ChildNodes)
                                                               {
                                              System::Windows::Forms::MessageBox::Show("xxxmm\n"+xxxmm->Name->ToString()+"\n");
                                                xxxmm->RemoveChild(elem21);
                                                 }
                                           }
     
                                  }
                          }
     
                      }
                }
             }
          }
        }
      }
     }
    }
    System::Windows::Forms::MessageBox::Show("ca marche avant save");
    	doc1->Save("c:\\test30.xml");
    	System::Windows::Forms::MessageBox::Show("ca marche");

  5. #5
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut je suis vraiment bloqu�!
    pour etre sur je fais le meme code avec Appendchild et je l utilise la fonction donc il m ajoute un node et je laisse la meme structure et je change juste le append en removechild

    et il me genere cette exception comme quoi il trouve pas le child ??!!
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    An unhandled exception of type 'System.ArgumentException' occurred in System.Xml.dll
     
    Additional information: The node to be removed is not a child of this node.

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    regarde ce mini exemple
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    	String ^monXml = "<data><item>1</item><item>2</item></data>";
    	XmlDocument ^xmlDoc = gcnew XmlDocument();
    	xmlDoc->LoadXml(monXml);
    	Console::WriteLine(xmlDoc->InnerXml);
    	XmlNode ^xPere = xmlDoc->ChildNodes[0];
    	XmlNode ^xn = xPere->ChildNodes[0];
    	xPere->RemoveChild(xn);
    	Console::WriteLine(xmlDoc->InnerXml);

  7. #7
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut
    ca j'ai deja essay�,
    meme en utilisant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    RemoveChild(root->firstChild);
    il me supprime le premier node

    mais le pb c'est quand je le dirige vers un node precis, il me dis qu'il existe pas pourtant il existe et pour etre sur je l'ajoute et j'utilise le meme code au lieu de Apend je mets Remove donc je suis sur qu'il existe mais il me dit qu'il existe pas !!

  8. #8
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    tu serais pas sur le mauvais fils par hasard ?

  9. #9
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut
    voici mon fichier xml par exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <levels>
      <level id="1">
        <roles>
          <role id="1">
            <users>
              <user login="login11" password="password11">
              </user>
              <user login="login12" password="password12">
                <file type="1" status="r" access="r" version="00" prop="x">file121</file>
                <file type="2" status="r" access="r" version="00" prop="x">file122</file>
                <user login="login11" password="password11">
                </user>
              </user>
            </users>
         </role>
        </roles>
      </level>
    et mon code est le suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    XmlDocument^doc1 = gcnew XmlDocument();
     
     
     
    	doc1->Load("c:\\test30.xml");
     
     
     
    	XmlNode^ elem3 = doc1->CreateNode(XmlNodeType::Element, "user", nullptr);
     
     
    	XmlAttribute^ attribLogin = doc1->CreateAttribute("login");
    	attribLogin->Value = "login11";
    	elem3->Attributes->Append(attribLogin);
    	XmlAttribute^ attribPwd = doc1->CreateAttribute("password");
    	attribPwd->Value = "password11";
    	elem3->Attributes->Append(attribPwd);
    	elem3->InnerText = "";
    for each (XmlNode^xn in doc1->ChildNodes[0]->ChildNodes)
    			{
    			if((xn->Attributes["id"]->Value->ToString()=="1"))
    			{	
     
    				for each (XmlNode ^xcn in xn->ChildNodes)
    				{
    					if(xcn->Name->ToString()=="roles")
    					{
     
    						for each (XmlNode ^xcn2 in xcn->ChildNodes)
    						{
    							if((xcn2->Attributes["id"]->Value->ToString()=="1"))
    							{
     
    								for each (XmlNode ^xxx in xcn2->ChildNodes)
    								{
    									if((xxx->Name->ToString()=="users"))
    									{
     
    										//System::Windows::Forms::MessageBox::Show(xxx->FirstChild->Value->ToString());
    										for each (XmlNode ^xxxm in xxx->ChildNodes)
    										{
    											//root->RemoveChild(elem3);
     
    											//if(xxxm->Attributes["login"]->Value->ToString()=="login11")
    											//{
    												//for each (XmlNode ^xxxmm in xxxm->ChildNodes)
    												//{
    												//System::Windows::Forms::MessageBox::Show("xxxmm\n"+xxxmm->Name->ToString()+"\n");
    												//xxxmm->RemoveChild(elem21);
    												//}
    											//System::Windows::Forms::MessageBox::Show(xxx->ChildNodes[0]->Value->ToString());
     
    											xxxm->RemoveChild(elem3);
    											//xxxm->AppendChild(elem3);
    											//}
     
     
    										}
     
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    	}
    System::Windows::Forms::MessageBox::Show("ca marche avant save");
    	doc1->Save("c:\\test30.xml");
    	System::Windows::Forms::MessageBox::Show("ca marche");
    et pour etre sur la premiere fois j'utilise Append et ca m ajoute l element et apres je remplace dans le code append par remove, il me dit que je ce node ne contient pas le child

  10. #10
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut
    j utilise meme avant le remove :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    System::Windows::Forms::MessageBox::Show(xxxm->Name->ToString());
    et il m affiche user donc je suis bien dans le bon child ??

  11. #11
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut
    si je fais :append et puis le remove ca marche ! c'est � dire que le pb vient de la declaration de l element elem3
    :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    XmlDocument^doc1 = gcnew XmlDocument();
     
     
     
    	doc1->Load("c:\\test30.xml");
     
     
     
    	XmlNode^ elem3 = doc1->CreateNode(XmlNodeType::Element, "user", nullptr);
     
     
    	XmlAttribute^ attribLogin = doc1->CreateAttribute("login");
    	attribLogin->Value = "login11";
    	elem3->Attributes->Append(attribLogin);
    	XmlAttribute^ attribPwd = doc1->CreateAttribute("password");
    	attribPwd->Value = "password11";
    	elem3->Attributes->Append(attribPwd);
    	elem3->InnerText = "";
    je crois qu'il faut pas cr�er le node :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    XmlNode^ elem3 = doc1->CreateNode(XmlNodeType::Element, "user", nullptr);

  12. #12
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par d�faut
    j'ai trouv�

    il y a pas besoin de cr�er l'�lement (elm3)
    et au lieu de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    xxxmm->RemoveChild(elem21);
    il faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    xxxm->RemoveChild(xxxmm);

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Ajout d'un element dans un fichier XML
    Par vacknov dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 02/08/2007, 10h26
  2. [JDOM] probl�me de suppresion d'un element d'un fichier xml
    Par tareksc dans le forum Format d'�change (XML, JSON...)
    R�ponses: 3
    Dernier message: 29/05/2007, 17h48
  3. [C# 2.0] Inserer un element dans un fichier Xml
    Par Khrysby dans le forum Windows Forms
    R�ponses: 3
    Dernier message: 12/09/2006, 17h05
  4. R�ponses: 3
    Dernier message: 29/06/2006, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo