C#/XML/Ajouts de balises et attributs à un fichier existant

Résolu
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009 - 20 mars 2009 à 11:19
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre 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..

2 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
20 mars 2009 à 21:38
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!
1
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009
22 mars 2009 à 02:03
merci pour ton aide cela va m'être de grande utilité !
-1
Rejoignez-nous