0 votes

Xml et interaction de fichiers sur disque

Cela fait un moment que j'ai besoin de le faire, donc je regardais les anciennes méthodes pour écrire un XMLDocument à partir du code jusqu'à un fichier.

Dans mon application, j'écris beaucoup dans un XMLDocument avec de nouveaux éléments et valeurs, et je le sauvegarde périodiquement sur le disque, et je lis aussi à partir du fichier et en fonction des données, je fais des choses.

J'utilise des méthodes comme File.Exists(...) _xmldoc.LoadFile(..) etc...

Je me demande probablement s'il existe des méthodes meilleures pour cela de nos jours

  • Parser le XML
  • Vérifier son format pour sauvegarder
  • A la place que les données sauvegardées soient traitées comme un texte, mais comme du XML

Peut-être que ce que je fais est bien mais cela fait un moment et je me demandais s'il y avait d'autres méthodes :)

Merci

2voto

Jon Skeet Points 692016

Eh bien, il y a LINQ to XML qui est une API XML vraiment agréable introduite dans .NET 3.5. Je ne pense pas que l'API XMLDocument existante a beaucoup changé, si ce n'est quelques moyens plus simples de créer des XmlReader et des XmlWriter (XmlReader.Create/XmlWriter.Create).

Je ne suis pas sûr de ce que vous entendez vraiment par votre deuxième et troisième points. Que faites-vous exactement dans le code qui vous semble maladroit?

1voto

Brad Bruce Points 4359

Avez-vous regardé la méthode Save de votre XmlDocument? Elle sauvegardera tout ce qui se trouve dans votre XmlDocument sous forme de fichier formaté valide.

Si votre programme est capable d'utiliser la classe XmlDocument, la classe XmlDocument pourra sauvegarder votre fichier. Vous n'aurez pas besoin de vous soucier de la validation avant de sauvegarder, et vous pourrez lui donner n'importe quelle extension de fichier que vous souhaitez. En ce qui concerne votre troisième point... un fichier XML n'est vraiment qu'un fichier texte. Peu importe comment le système d'exploitation le voit.

1voto

Francis B. Points 4109

J'étais un grand fan de XmlDocument en raison de sa facilité d'utilisation, mais récemment j'ai eu un gros problème de mémoire avec cette classe, alors j'ai commencé à utiliser XmlReader et XmlWriter.

XmlReader peut être un peu difficile à utiliser si votre fichier Xml est complexe car vous lisez le fichier Xml de manière séquentielle. Dans ce cas, la méthode ReadSubTree de XmlReader peut être très utile car cette méthode ne renvoie que l'arborescence xml sous le nœud actuel, vous envoyez donc le nouveau xmlreader à une fonction pour analyser le contenu du sous-nœud et une fois que c'est fait, vous passez au nœud suivant.

Exemple de XmlReader :

string xmlcontent = "";

using(StringReader strContent = new StringReader(xmlcontent))
{
    using (XmlReader reader = XmlReader.Create(strContent))
    {
        while (reader.Read())
        {
            if (reader.Name == "SomeName" && reader.NodeType == XmlNodeType.Element)
            {
                //Envoyez le XmlReader créé par ReadSubTree à une fonction pour le lire.
                ReadSubContentOfSomeName(reader.ReadSubtree());
            }
        }
    }
}

Exemple de XmlWriter :

StringBuilder builder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(builder))
{
    writer.WriteStartDocument();

    writer.WriteStartElement("BigXml");
    writer.WriteAttributeString("someAttribute", "42");
    writer.WriteString("Some Inner Text");

    //Écrire des nœuds sous BigXml
    writer.WriteStartElement("SomeName");
    writer.WriteEndElement();

    writer.WriteEndElement();

    writer.WriteEndDocument();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X