Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#/XML] Creer et modifier un XML

Sujet résolu
    17 juin 2011 à 15:25:32

    Bonjour, j'essaie de créer une sorte de fichier XML qui regroupera plusieurs fichiers XML de même structure, une sorte de compilation !

    Je propose juste avant la modification de créer un fichier XML qui accueillera la compilation.
    Ensuite j'exécute les modifications.

    internal static void flux(string[] file, string[] liens, String flux)
            {
                //On ouvre le fichier XML hôte
                XmlDocument document = new XmlDocument();
                document.Load(flux.ToString());
                document.Save(flux.ToString());
            }
    

    L'erreur apparait au moment du load, je l'attrape dans une exception.
    //On demande ou est-ce que l'on veut enregitrer le nouveau flux XML
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "Fichiers XML (*.xml)|*.xml";
                DialogResult result = saveFileDialog.ShowDialog();
                if (result == System.Windows.Forms.DialogResult.OK)
                {
                    try
                    {
                        //On creer un nouveau document XML
                        XmlTextWriter XmlTextWriter = new XmlTextWriter(saveFileDialog.FileName,System.Text.Encoding.UTF8);
                        XmlTextWriter.WriteStartDocument(); // On commence l'ecriture
                        XmlTextWriter.Formatting = Formatting.Indented;
                        XmlTextWriter.Indentation = 4;
                        XmlTextWriter.WriteDocType("DTD", null, "dtd.dtd", null); // On insere la DOCTYPE
                        XmlTextWriter.WriteStartElement("liste"); // On ecrit la raçine
                        XmlTextWriter.WriteElementString("version","1"); // On ecrit une balise
                        XmlTextWriter.WriteEndElement();
                        XmlTextWriter.Flush(); //vide le buffer
                        XmlTextWriter.Close(); // ferme le document
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erreur lors de la création du flux");
                    }
    
                }
                Form Form2 = new Form2();
                Form2.ShowDialog();
                if (xml == System.Windows.Forms.DialogResult.OK && liens == System.Windows.Forms.DialogResult.OK)
                {
                        try
                        {
                            Program.flux(openFileDialog2.FileNames, openFileDialog1.FileNames, saveFileDialog.FileName);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Erreur lors de la modification du flux");
                        }               
                }
    

    Pourtant j'arrive bien a créer un fichier XML bien fourni qui s'affiche correctement dans un navigateur. JE comprend pas trop l'erreur, j'ai bien essayer de tester le string que je charge mais il contient bien le chemin d'acces au fichier :(

    Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      17 juin 2011 à 20:40:54

      Avec l'erreur générée, on pourrait surement plus t'aider ^^ .

      Edit : Pourquoi faire .ToString sur un objet qui est déjà un String dans le premier quote de code o_O ?
      • Partager sur Facebook
      • Partager sur Twitter
        17 juin 2011 à 22:48:51

        Citation : Nisnor

        Edit : Pourquoi faire .ToString sur un objet qui est déjà un String dans le premier quote de code o_O ?


        C'est la seule chose qui te parait louche ? :-°
        • Partager sur Facebook
        • Partager sur Twitter
          18 juin 2011 à 17:50:15

          Citation : Orwell

          C'est la seule chose qui te parait louche ? :-°


          Non, c'est vrai que charger de l'XML pour le sauvegarder la ligne d'après, y'a un truc de pas très très logique >_<
          • Partager sur Facebook
          • Partager sur Twitter
            20 juin 2011 à 9:44:19

            Merci pour vos réponses.

            Oui bon le ToString ne doit pas figurer mais c'est qu'un détail.

            Pour le load/save, c'est normal j'ai pas mis tout le code ^^

            J'ai compris l'erreur ce WE, cela provient de la ligne dtd, le XMLDocument n'arrive pas a la charger, elle est sur un serveur mais j'ai quand même besoin de la générer en local. Il n'y a pas un moyen pour qu'il ne l'interprète pas ?

            J'ai aussi une autre erreur mais ça n'a rien a voir avec le XML mais toujours en C#, je ne sais pas si je dois recréer un autre sujet ?

            Merci d'avance
            • Partager sur Facebook
            • Partager sur Twitter
              21 juin 2011 à 11:35:25

              En farfouillant un peu, il me semble qu'il y a moyen de spécifier qu'un document XML va vérifier le DTD ou non.

              Edit : Teste avec XmlReader.<L'une des surcharge de Create(truc, XmlReaderSettings)>
              en lui donnant à manger un XmlReaderSettings avec DtdProcessing = DtdProcessing.Ignore.

              Ed-Edit : Ton XmlDocument n'arrive pas à charger le doc XML avec DTD parce que la valeur par défaut de DtdProcessing est DtdProcessing.Prohibit => Lève une exception lorsqu'une ligne DTD est rencontrée dans le document. Passer ça à DtdProcessing.Ignore ou DtdProcessing.Parse devrait surement résoudre ton problème.
              • Partager sur Facebook
              • Partager sur Twitter
                21 juin 2011 à 14:18:41

                @Nisnor : Ton post m'a donner des éléments de recherches et je suis parvenue a creer la compilation sans que le DTD leve une exception.

                XmlDocument documentFlux = new XmlDocument();
                 documentFlux.XmlResolver = null;
                 try
                 {
                 documentFlux.Load(flux);
                


                Je le met pour faire profiter d'autres personnes qui aurait le même problème que moi, mais cela ne s'applique que pour un XmlDocument, pour un XmlReader/Writer , c'est la solution que tu as proposé Nisnor qui est la bonne ;)

                PS: J'ai finalement résolu mon autre problème, je ne savais pas que l'on ne pouvait pas modifier le main dans Program.cs.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 juin 2011 à 16:23:41

                  Citation : Kerne95

                  PS: J'ai finalement résolu mon autre problème, je ne savais pas que l'on ne pouvait pas modifier le main dans Program.cs.


                  Ca dépend de ce que t'entend par "modifier".

                  -La signature de la méthode main est effectivement statique et ne pas beaucoup varier.
                  -A partir du moment où tu es dans un RDA .NET, l'attribut [STAThread] (ou similaire) est obligatoire => C'est une obligation pour les interfaces .NET que d'être exécutées dans un thread unique. Cet attribut STA (pour Single-Threaded Apartment) force les composants COM sous-jacents aux classes C# à fonctionner en mono-thread. Il y a un autre attribut qui force le contraire : MTAThread (pour Multi-Threaded Apartment) qui force les composants COM à fonctionner en multi-thread. Les composants COM utilisés pour l'interface utilisateur sont (à l'heure actuelle) toujours en STA (c'est p'tet possible de le passer en MTA...Mais je ne sais pas comment et je n'en vois pas réellement l'utilité)
                  -Le code dans la méthode Main peut être modifié en fonction de tes besoins, main restant avant tout une méthode statique classique.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [C#/XML] Creer et modifier un XML

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown