2012-06-10 9 views
2

J'ai besoin de charger un fichier xml en mémoire pour pouvoir y accéder plusieurs fois à partir de formulaires différents. Le XML est dans ce format:charger le fichier xml dans la mémoire

<Slides> 
    <Slide> 
     <Name>Name 1</Name> 
     <Value>Value 1</Value> 
     <Type>Type 1</Type> 
    </Slide> 
    <Slide> 
     <Name>Name 2</Name> 
     <Value>Value 2</Value> 
     <Type>Type 2</Type> 
    </Slide> 
    </Slides> 

Je ne veux pas utiliser une base de données pour stocker les vars. Y a-t-il une autre méthode pour stocker les données en mémoire? En ce moment j'utilise un fichier txt pour chaque diapositive et lecteur de flux, ce qui, je suis sûr, n'est pas la meilleure option.

EDIT: J'ai ajouté ce code, mais serai-je en mesure d'obtenir les diapositives à chaque fois sans lire à nouveau le fichier XML?

 var slides = from s in XElement.Load("slides.xml").Elements("Slide") 
         select s; 
     foreach (var slide in slides) 
     { 
      //code 
     } 
+0

Si les données sont statiques, cela peut vous aider: http://stackoverflow.com/a/2820420/600559 –

+1

Bien qu'il existe des exceptions, les bases de données sont généralement utilisées pour le stockage persistant (sur disque), pas en mémoire. –

Répondre

5

Vous devez utiliser la méthode de charge XDocument: http://msdn.microsoft.com/en-us/library/bb343181.aspx

je pense qu'il est préférable d'utiliser XDocument que le XmlDocument ... mais cela dépend de vos besoins ...

Le XDocument est plus de mémoire optimisée que le XmlDocument, et je pense qu'ils sont tous les deux faciles à utiliser (pour obtenir des valeurs du xml)

+0

et est les données stockées dans la mémoire afin que je puisse l'utiliser quand je veux pendant que l'application est ouverte? ou dois-je utiliser le XElement.Load chaque fois que je veux obtenir les données? –

+1

@KendallHildebrandt Tant que vous gardez cette instance de 'XDocument', il vous suffit de la charger une seule fois. – vcsjones

+0

Oui, vous pouvez le faire, mais je voudrais enregistrer l'ensemble XElement afin que je ne me limiterai pas à quelque chose d'autre - var xDocument = XDocument.Load ("slides.xml"); – eyossi

1

D'abord, vous devez enregistrer le fichier xml dans votre fichier projet ou votre disque dur.Parce que vous seul pouvez charger le fichier xml dans le code derrière. Vous pouvez créer xml file dynamically. Ce sera beaucoup mieux.

using System.Xml; 

    XmlDocument myxml = new XmlDocument(); 
    myxml.Load("D:/sample.xml");//Load you xml file from you disk what you want to load 
    string element_1 = myxml.GetElementsByTagName("Name")[0].InnerText; 
    string element_2 = myxml.GetElementsByTagName("Value")[0].InnerText; 
    string element_3 = myxml.GetElementsByTagName("Value")[0].InnerText; 
    string element_4 = myxml.GetElementsByTagName("Name")[1].InnerText; 
    string element_5 = myxml.GetElementsByTagName("Value")[1].InnerText; 
    string element_6 = myxml.GetElementsByTagName("Value")[1].InnerText; 

Essayez ce programme, il vous aidera.

+1

Je pense que c'est un code très sale surtout que vous n'avez pas utilisé une boucle. Que faire si j'ai 1000 enregistrements? dois-je ajouter [i] manuellement? –

+0

Je viens de poster pour ce que vous avez demandé en tant que question.Si vous avez besoin de ce genre de code, demandez-moi je vais vous envoyer le code complet avec boucle ... –

Questions connexes