C#/XML/Ajouts de balises et attributs à un fichier existant [Résolu]

Messages postés
49
Date d'inscription
lundi 4 décembre 2000
Dernière intervention
29 avril 2009
- - Dernière réponse : damsdu64
Messages postés
49
Date d'inscription
lundi 4 décembre 2000
Dernière intervention
29 avril 2009
- 22 mars 2009 à 02:03
Premièrement je tiens a préciser que je suis débutant en C# et XML aussi.

Je vous expose mon problème :
A la base je dois créer en C# un fichier XML de ce type la :

<style><![CDATA[ODY{font:x-small 'Verdana';margin-right:1.5em}
.c{cursor:hand}
.b{color:red;font-family:'Courier New';font-weight:bold;text-decoration:none}
.e{margin-left:1em;text-indent:-1em;margin-right:1em}
.k{margin-left:1em;text-indent:-1em;margin-right:1em}
.t{color:#990000}
.xt{color:#990099}
.ns{color:red}
.dt{color:green}
.m{color:blue}
.tx{font-weight:bold}
.db{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;border-left:1px solid #CCCCCC;font:small Courier}
.di{font:small Courier}
.d{color:blue}
.pi{color:blue}
.cb{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;font:small Courier;color:#888888}
.ci{font:small Courier;color:#888888}
PRE{margin:0px;display:inline}]]></style>
<?xml version= "1.0" standalone="yes"
?>

[# -]<BaliseRacine>

[# -]<Vol030409>

 <Acceleration_Mintest=" 4 " />

 <Acceleration_Maxtest ="234" />

 <Duree_Trajettest= " 234 " />

 <Total_Accelerationstest ="1345" />

 </Vol030409>

 </BaliseRacine>

Pour créer ce fichier XML j'écrit ce code me permettant ci le fichier n'existe pas de le créer :

 if (!File.Exists("XML2.xml"))
            {
                XmlDocument xml = new XmlDocument();

                XmlDeclaration Declaration = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
                try
                {
                    xml.AppendChild(Declaration);

                    BaliseRacine = xml.CreateElement("BaliseRacine");
                    xml.AppendChild(BaliseRacine);

                    XmlElement VolXXX = xml.CreateElement(NumVol);
                    BaliseRacine.AppendChild(VolXXX);

                    //Création de la première balise element1
                    XmlElement element1 = xml.CreateElement("Acceleration_Min");
                    VolXXX.AppendChild(element1);
                    //Création de l'attribut de la balise element1 qui s'appellera ValeurMin et qui contiendra
                    //la valeur qu'il aura été chercher dans le fichier
                    XmlNode attribut1 = xml.CreateNode(XmlNodeType.Attribute, "test", null);
                    attribut1.Value = ValeurMin;
                    element1.Attributes.SetNamedItem(attribut1);

                    XmlElement element2 = xml.CreateElement("Acceleration_Max");
                    VolXXX.AppendChild(element2);
                    XmlNode attribut2 = xml.CreateNode(XmlNodeType.Attribute, "test", null);
                    attribut2.Value = ValeurMax;
                    element2.Attributes.SetNamedItem(attribut2);

                    XmlElement element3 = xml.CreateElement("Duree_Trajet");
                    VolXXX.AppendChild(element3);
                    XmlNode attribut3 = xml.CreateNode(XmlNodeType.Attribute, "test", null);
                    attribut3.Value = Duree;
                    element3.Attributes.SetNamedItem(attribut3);

                    XmlElement element4 = xml.CreateElement("Total_Accelerations");
                    VolXXX.AppendChild(element4);
                    XmlNode attribut4 = xml.CreateNode(XmlNodeType.Attribute, "test", null);
                    attribut4.Value = Total;
                    element4.Attributes.SetNamedItem(attribut4);

                    MessageBox.Show("Fichier XML créer");
                }
                catch (Exception exe) { Console.WriteLine(exe.Message); }

                xml.Save("XML2.xml");
            }

Et maintenant je voudrais pouvoir rajouter des balises à ce meme fichier existant pour que cela me donne un fichier de ce genre et cela a chaque fois que je voudrais rajouter une balise Volxxx avec toutes les données qu'il faut à l'intérieur:

<?xml version="1.0" standalone="yes"
?>

[infomsg.aspx?ajout=1# -]<BaliseRacine>

[infomsg.aspx?ajout=1# -]<Vol030409>

 <Acceleration_Mintest=" 4 " />

 <Acceleration_Maxtest ="234" />

 <Duree_Trajettest= " 234 " />

 <Total_Accelerationstest ="1345" />

 </Vol030409>
<Vol040409>

 <Acceleration_Mintest= " x " />

 <Acceleration_Maxtest ="x" />

 <Duree_Trajettest= " x " />

 <Total_Accelerationstest ="x" />

 </Vol040409>

 </BaliseRacine>

J'ai effectuer un début mais je n'arrive pas a trouver ce qu'il faut faire exactement tout mes esais sont des echecs...

J'ai fait quelques tests avec ce bout de code :

try
                {
                    //Création et chargement du fichier XML
                    XmlDocument xml = new XmlDocument();
                    xml.Load("XML2.xml");

                    XmlElement VolXXX2 = xml.CreateElement(NumVol2);
                    BaliseRacine.AppendChild(VolXXX2);

                    //Création de la première balise element1
                    XmlElement element5 = xml.CreateElement("Acceleration_Min");
                    VolXXX2.AppendChild(element5);
                    //Création de l'attribut de la balise element1 qui s'appellera ValeurMin et qui contiendra
                    //la valeur qu'il aura été chercher dans le fichier
                    XmlNode attribut5 = xml.CreateNode(XmlNodeType.Attribute, "test", null);
                    attribut5.Value = ValeurMin;
                    element5.Attributes.SetNamedItem(attribut5);

                    XmlElement element6 = xml.CreateElement("Acceleration_Max");
                    VolXXX2.AppendChild(element6);
                    XmlNode attribut6 = xml.CreateNode(XmlNodeType.Attribute, "test", null);
                    attribut6.Value = ValeurMax;
                    element6.Attributes.SetNamedItem(attribut6);

                    XmlElement element7 = xml.CreateElement("Duree_Trajet");
                    VolXXX2.AppendChild(element7);
                    XmlNode attribut7 = xml.CreateNode(XmlNodeType.Attribute, "test", null);
                    attribut7.Value = Duree;
                    element7.Attributes.SetNamedItem(attribut7);

                    XmlElement element8 = xml.CreateElement("Total_Accelerations");
                    VolXXX2.AppendChild(element8);
                    XmlNode attribut8 = xml.CreateNode(XmlNodeType.Attribute, "test", null);
                    attribut8.Value = Total;
                    element8.Attributes.SetNamedItem(attribut8);

                    xml.Save("XML2.xml");
                   
                }
                catch (Exception exe) { Console.WriteLine(exe.Message); }
                MessageBox.Show("Fichier XML modifier enfin logiquemment......");
          
            }

Ce code correspond au meme code d'en haut en précisant que on //xml.Load("XML2.xml");
ce qui nous permet de charger en mémoire le document xml et à la fin j'effectue un     xml.Save("XML2.xml");
ce qui me permet logiquement de sauvegarder les modifications que j'ai fait.

Sa compile mais sa ne fonctionne pas merci pour vos idées. Je compte sur vous..
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
1
Merci
Premierement je tiens à te dire que l'on dit Bonjour.

Ton code semble bon, mais il manque peut-être la récupération de la baise racine, permettant d'ajouter les noeuds

j'ai fait un test en le remodelant  comme ceci:

static
void Main(
string[] args)
{
   XmlDocument xml=
new XmlDocument();
   XmlElement BaliseRacine;

   if (File.Exists("XML2.xml"))
   {
      xml.Load("XML2.xml");
      //Récupération de la balise racine

      BaliseRacine=xml.GetElementsByTagName ("BaliseRacine")[0] as XmlElement;
   }

   else
   {
      //Création de l'entête et de la balise racine

      xml.AppendChild(xml.CreateXmlDeclaration("1.0", "UTF-8", null));
      BaliseRacine = xml.CreateElement("BaliseRacine");
      xml.AppendChild(BaliseRacine);
   }
   AddVol (xml,BaliseRacine,"Vol030409");
   AddVol (xml,BaliseRacine,"Vol040409");
   xml.Save("XML2.xml");
}

static
void AddVol (XmlDocument xml,XmlElement BaliseRacine,
string volName)
{

   try
   {
      XmlElement VolXXX = xml.CreateElement(NumVol);
      BaliseRacine.AppendChild(VolXXX);

      
//Création de la première balise element1
      Ajoute ici le reste de ton code
      ...
   }

   catch (Exception exe) { Console.WriteLine(exe.Message); }
}

Et cela fonctionne bien.

C# is amazing, enjoy it!

Merci cs_Robert33 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Robert33
Messages postés
49
Date d'inscription
lundi 4 décembre 2000
Dernière intervention
29 avril 2009
-1
Merci
merci pour ton aide cela va m'être de grande utilité !
Commenter la réponse de damsdu64

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.