HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Kulcs-érték lista tárolása XML-ben


Példaprogram letöltése

8393 bájt

Sok esetben szüksége lehet alkalmazásunknak saját adatait tárolnia. Ezeket a program futása alatt egy olyan listában a legegyszerűbb használni, melynél minden adatot egy kulcs azonosít. Erre jó a NameValueCollection osztály, probléma csak ott van, hogy a program leállásakor ennek tartalma elvész. Ha viszont tartalmát tárolhatjuk XML-ben és induláskor betölthetjük, akkor észre sem vesszük ezt az apró hiányosságát a NameValueCollection-nek.

A probléma megoldásához először is állítsuk elő azt. Hozzunk létre tehát egy NameValueCollection típusú osztályt és helyezzünk el benne adatokat.
    private NameValueCollection nvc = new NameValueCollection();
Adat hozzárendelése a NameValueCollection Add függvényével történhet. Első paraméterként a tárolandó adat nevét, míg másodikként a hozzá tartozó értékét kell megadnunk. Ezt követően meghívjuk belső ShowList nevű függvényünket abból a célból, hogy megjelenítsük a NameValueCollection-ban aktuálisan tárolt adatokat.
    private void button1_Click(object sender, System.EventArgs e)
    {
      nvc.Add(textBox1.Text, textBox2.Text);
      ShowList();
      ...
    }
A ShowList egy ciklus segítségével az első elemtől az utolsóig végigmegy és kiírja mind a nevet, mind a hozzá tartozó adatot egy ListBox-ba. A nevet a NameValueCollection GetKey függvénye adja, paraméterként az adott kulcs sorszámát adjuk meg. Az aktuális érték pedig az osztály indexelőjén keresztül érhető el.
    private void ShowList()
    {
      listBox1.Items.Clear();
      for (int i=0; i<nvc.Count; i++)
      {
        listBox1.Items.Add(nvc.GetKey(i) + " = " + nvc[i]);
      }
    }
Most már adott egy a program futása alatt bármikor változtatható lista és így adott a probléma is: a program újraindításával elvész az addig tárolt értékek halmaza. Megoldásként és következő lépésként mentsük hát el az adatokat egy XML állományba. Ehhez szükségünk lesz egy XmlDocument osztály példányára és egy XmlNode típusú változóra is.
    private void button2_Click(object sender, System.EventArgs e)
    {
      XmlDocument xd = new XmlDocument();
      XmlNode xn;
Létrehozunk egy elemet a dokumentumban, mely annak típusát írja le és egy másikat, mely a fő csomópont lesz az XML állományon belül.
      xd.AppendChild(xd.CreateDocumentType("SoftwareOnline", null, null, null));
      xd.AppendChild(xd.CreateElement("NameValueCollection"));      
Ezt követően egy ciklussal végigmegyünk az összes tárolt adaton és mindegyikhez egy új csomópontot hozunk létre azzal a névvel ami a megadott kulcs a listában, majd ehhez eltároljuk a hozzá tartozó értéket is. A ciklus végén már csak mentenünk kell az XmlDocument-ben létrehozott adathalmazt egy Xml állományba a Save függvény hívásával.
      for (int i=0; i<nvc.Count; i++)
      {
        xn = xd.CreateNode("element", nvc.GetKey(i), null);  
        xn.InnerText = nvc[i];
        xd.DocumentElement.AppendChild(xn);      
      }
      xd.Save("_test.xml");    
    }
Az így létrejött XML állományba ha belenézünk, akkor valami hasonlót kell látnunk:
  <!DOCTYPE SoftwareOnline>
  <NameValueCollection>
    <Key0>1</Key0>
    <Key1>199003697</Key1>
    <Key2>63603518</Key2>
    <Key3>1743857189</Key3>
  </NameValueCollection>
Most már csak egy feladatunk maradt hátra: vissza is kell töltenünk XML-ből az adatokat a NameValueCollection listájába. Első lépésként ellenőrizzük a File osztály Exists függvényével, hogy az XML állományunk létezik-e. Ha igen, akkor ismét egy XmlDocument osztályt és annak Load függvényét használva betöltjük az állományt. Egy foreach ciklus segítségével végigmegyünk az összes csomóponton, mely a NameValueCollection nevű csomóponton belül helyezkedik el és hozzáadjuk a NameValueCollection típusú listánkhoz. A ciklus végén nem marad más hátra, mint a lista tartalmának ismételt megjelenítése.
    private void button4_Click(object sender, System.EventArgs e)
    {
      if (File.Exists("_test.xml"))
      {
        XmlDocument xd = new XmlDocument();
        xd.Load("_test.xml");
        foreach (XmlNode xn in xd["NameValueCollection"].ChildNodes)
        {
          nvc.Add(xn.Name, xn.InnerText);
        }
        ShowList();
      }
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 27. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |