Szükségem volt egy programozási feladatnál XML-fájlok manipulálására. Leginkább csak olvasás, de adott esetben módosítás is. Lehet csak nekem került bő negyedórámba megtalálni, mivel semmilyen C#-pal kapcsolatos könyvet nem olvastam, a neten pedig eléggé összevissza volt az információ, de végül azért sikerült, és közel sem olyan bonyolult a dolog. Az egyébként kiváló lehetőség ha nem akarunk komolyabb dolgokat tárolni és adatbázis-kezelőkkel dolgozni, kezelni pedig nem sokkal bonyolultabb mint egy SQL-lekérdezést megírni. Annyira hozzáteszem hogy lebecsülni sem szabad az erejét, ugyanis pont nemrég láttam egy csupán néhány soros kódot, mely cirka négy-ötszáz megabájtos XML-fájlokban dolgozott, meglepően gyorsan.
A System.Xml névtérre természetesen szükség lesz, egyébként ezen belül gyakorlatilag minden a rendelkezésünkre áll, érdemes utánaolvasni.
Adott tehát egy XML-fájl, mely mondjuk egy telefonkönyv adatbázisát képezi, benne ismerőseink nevével, becenevével, telefonszámával és e-mail-címével:
<?xml version="1.0" encoding="UTF-8"?> <szemelyek> <szemely> <nev>Kép Ernő</nev> <nick>Monitor</nick> <mobil>+36201234567</mobil> <email>kep.erno@qvga.info</email> </szemely> <szemely> <nev>Vincs Eszter</nev> <nick>Vinyó</nick> <mobil>+36301234567</mobil> <email>vincs.eszter@quantumdigital.com</email> </szemely> </szemelyek>
Oké, most a System.Xml névtér meghívása után a szükséges helyen a kódunkban az alábbi sorokat helyezzük el:
XmlDocument XD = new XmlDocument();
XD.Load("C:\\szemelyek.xml");
XmlNode XN = XD.DocumentElement;
Ez létrehoz egy XD névre hallgató XmlDocument objektumot és betölti abba a C:\szemelyek.xml fájl tartalmát. Az ilyen módú meghívásnál mindig kettő darab visszaperjelet írjunk, különben az escape-elés miatt hiba lép majd fel. (Itt most arról ne essék szó, hogy a fájl beolvasásánál adott esetben előforduló hibák ellen hogyan védekezzünk.)
Szóval van egy dokumentumunk, innentől kezdve szabadon garázdálkodhatunk benne. Az adatok kiolvasásának és módosításának legegyszerűbb módja az XmlNodeList-en keresztül lehetséges. Ebben egyesével el tudjuk érni a szükséges elemek adatait, az alábbi módon:
XmlNodeList XNL = XN.SelectNodes("/szemelyek/szemely/nev")
Vagyis most a nevekkel fogunk dolgozni. Fontos, hogy mindig perjellel legyen kezdve, és anélkül befejezve az elérés. Ha csak a szemelyek-ig adjuk meg, akkor az összes elemének értéke össze lesz konkatenálva (sic!). Most írjuk ki a konzolra az összes nevet, mely szerepel az adatbázisban:
for (int i = 0; i < XNL.Count; i++)
{
System.Console.WriteLine(XNL.Item(i).InnerText.ToString());
}
Tegyük fel, hogy Vincs Eszter megházasodik, ezért a neve Merevlemezné Vincs Eszterre változik, módosítanunk kell tehát adatait:
XNL.Item(1).InnerText = "Merevlemezné Vincs Eszter";
XD.Save("C:\\tables.xml");
Gyakorlatilag ennyi a lényeg. Lehet, hogy van az XML-kezelésnek szebb és jobb módja, nekem ezek azonban teljesen megfeleltek a szükséges bolondvédelemmel kiegészítve természetesen.
Remélem segített.

