NePo
Rugsėjis 25, 2006

Darbas su XML failais

Pasaulis jau seniai svaigsta dėl kalbos patogumo, paprastumo, universalumo. Pats laikas ir man prisijungti prie tų žmonių. Aš pademonstruosiu dvi paprastas funkcijas: failų nuskaitymas ir atvaizdavimas į failą.

Šį kartą aš neaiškinsiu labai detaliai kaip sukurti programą, todėl jeigu jums bus sudėtinga, pirmiau pabandykite pasidaryti Task Manager.

Darbai ateičiai:

  • pirmiausia, be abejonės, reikėtų žmones išmokinti rašyti/skaityti paprastus failus. Gal kas nors norėtų tai padaryti?
  • reikėtų parašyti pažintinį straipsnį apie . Vėl gi laukiu savanorių.

O kol kas belaukiant detalaus straipsnio truputis teorijos:
- Extensible Markup Language, t.y. išplėstinė žymių kalba sukurta W3C specialiai interneto dokumentams. Ji leidžia susikurti savo žymes, apibūdinimus, duomenų perdavimą, validavimą ir interpretavimą tarp programų ir organizacijų.

Užduotis. Turime knygų sąrašą, norime jį peržiūrėti, įterpti naujas knygas arba pašalinti senas. Knygą apibūdina du atributai: knygos pavadinimas ir kaina.

Pirmiausiai pasirašysim , failą atitinkantį užduoties reikalavimus:
Kodą patalpinau čia
Šį failą pavadinau BOOKS1.

Dabar susikurkime savo Visual Studio projektą, ant formos užsidėjau dataGridView1, Button1, Button2.
Paspaudžiam Button1 ir įrašom tokį kodą:

StreamReader myStreamReader = null;
FileStream fs = File.OpenRead("BOOKS1.XML");
myStreamReader = new StreamReader(fs);
myDataSet = new DataSet();
myDataSet.ReadXml(myStreamReader);
dataGridView1.DataSource = myDataSet.Tables[0];
myStreamReader.Close();
fs.Close();

StreamReader - sukuria bitų srautą duomenų nuskaitymui.
FileStream - suteikia duomenų srautui priėjimą prie failo.
File.OpenRead - atidaromas failas skaitymo režimui.
DataSet - sukuriama vieta duomenų saugojimui.
ReadXml - Nuskaito failą į DataSet.
dataGridView1.DataSource = myDataSet.Tables[0] - priskiriami duomenys į dataGridView, atkreipkite dėmesį, jog nekūrėme jokių stulpelių, jie atsiras automatiškai pagal duomenis esančius DataSet‘e.
Taip pat primenu, jog labai svarbu nepamiršti uždaryti atidarytų failų.

Aukščiau pateiktas kodas neveiks, nes reikia įtraukti dar papildomą biblioteką failų skaitymui:

using System.IO;

Dabar pereikime prie Button2, jame realizuosime rašymą į failą.

StreamWriter myStreamWriter = null;
FileStream fs = File.OpenWrite("BOOKS2.XML");
myStreamWriter = new StreamWriter(fs);
myDataSet.WriteXml(myStreamWriter);
myStreamWriter.Close();
fs.Close();

Aš rašau į kitą failą, nors galima rašyti ir į tą patį. Atkreipkite dėmesį į File.OpenWrite funkciją, ji atidaro failą rašymui, jeigu tokio failo nėra, sukuria naują.
Turbūt jau pastebėjote, jog duomenys nėra paimami iš dataGridView, DataSet viską padaro automatiškai.

Beje, jeigu visą kodą nukopijuotumėte jis vis dar neveiktų, nes nebuvo deklaruotas DataSet, jį reikia deklaruoti ne kaip lokalų funkcijos kintamajį, bet kaip visos klasės kintamajį. Atlikus deklaraciją, jūsų kodas turėtų atrodyti maždaug taip:

public partial class Form1 : Form
{
DataSet myDataSet;
 
public Form1()
{

Štai ir viskas sukompiliuojam ir programa veikia.

Ar galėtume dar kaip nors patobulinti? Pabandykime įsidėti openFileDialog ir saveFileDialog. Pirmiausia, įsidėję openFileDialog nurodome filtrui, jog leistų atidarinėti tik xml tipo failus. Analogiškai reiktų padaryti ir su saveFileDialog.
Taigi, kaip padaryti, kad mūsų turimas openFileDialog veiktų? Pataisom anksčiau turėtą kodą ir galutinis rezultatas toks:

StreamReader myStreamReader = null;
openFileDialog1.FileName = Application.StartupPath+"\\.";
if (openFileDialog1.ShowDialog() != DialogResult.OK) return;
FileStream fs = File.OpenRead(openFileDialog1.FileName);
myStreamReader = new StreamReader(fs);
myDataSet = new DataSet();
myDataSet.ReadXml(myStreamReader);
dataGridView1.DataSource = myDataSet.Tables[0];
myStreamReader.Close();
fs.Close();

Po return jokie veiksmai nevykdomi, taigi, kol nenurodysite kokį failą skaityti, programa neveiks.
Application.StartupPath - nurodo, kad openFileDialog ieškotų failo toje direktorijoje, kurioje startuoja programa, o ne kur nors dausose (ta prasme “My documents”).
Dabar pataisykime kodą, priverskime dirbti ir saveFileDialog:

StreamWriter myStreamWriter = null;
if (saveFileDialog1.ShowDialog() != DialogResult.OK) return;
FileStream fs = File.OpenWrite(saveFileDialog1.FileName);
myStreamWriter = new StreamWriter(fs);
myDataSet.WriteXml(myStreamWriter);
myStreamWriter.Close();
fs.Close();

Štai ir viskas. Klausimai, pasiūlymai?
Pastaba: Programoje mes neuždraudėme rašymo į failą, dar jokių duomenų nenuskaičius, šitą dalį reiktų apgalvoti patiems.
Parsisiuntimui
Programa kurią kartu sukurėme
Nuorodos
wiki XML
Gidas į XML
XML - kas tai?

Panašūs straipsniai


“Darbas su XML failais” komentarų: 3

  1. Laukinių web servisų medžioklė Pixel.lt

    […] Jeigu jums vistiek dar kyla problemų tuomet skaitykite Darbas su XML failais. […]

  2. » Laužom ir koduojam Archyvas » Pixel.lt

    […] Aš parašiau straipsnius apie C# kalbą: Kuriam savo Task Manager, Darbas su XML failais, Laukinių web servisų medžioklė ir Pažintis su WMI. Kiekvieno straipsnio pabaigoje duodavau atsisiųsti sukurtą programą, bet turbūt daugelį iš jūsų sunervindavo, jog neduodavau kodo ir projekto failų. Čia mano logika buvo tokia: kas norės tas iš .exe bylos išgaus tai, ko jam reikia, o kas nežino kaip tai padaryti, vadinasi nevertas. Šiame straipsnyje kaip tik noriu papasakoti, kaip iš .NET sukurto .exe failo pavogti kodą ir kaip nuo to apsisaugoti. Šiame straipsnyje bus daug paveiksliukų ir mažai teksto. […]

  3. » Ataskaitų generavimas Archyvas » Pixel.lt

    […] Dirbdamas su Visual Studio pastebėjau, kad šis įrankis turi… Norėjau pasakyti neturi daug naudingų pagalbinių priemonių, kokių tikėtumėmės iš analogiškų sistemų. Šį kartą man reikėjo, jog programa darytų ataskaitas, tačiau jokio tam skirto komponeto neradau. Vienas iš variantų - Crystal Report, bėda ta, jog jis nėra standartinis priedas ir ne gana to dar truputį kainuoja. Todėl norėčiau pakalbėti apie antrą būdą, kuris mane pilnai patenkino. Kad nereiktų išgalvoti kokios nors sudėtingos programos pasinaudosiu anksčiau savo sukurta programa apie kurią jau rašiau straipsnyje “Darbas su XML failais”. Tiems, kurie neskaitė ansktesnio mano straipsnio, tikiuosi nekils keblumų. […]

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.