HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

XML dokumentum létrehozása programból


XML 4. rész

Példaprogram letöltése

13502 bájt

Az XML formátum sok mindenre használható, többek között adatbázisok tárolására is. Ebben a példában egy olyan programot készítünk, amely egy lekérdezés eredményéből állít elő egy XML dokumentumot.
Az így elkészített fájlok nagy előnye, hogy a megfelelő stíluslap hozzáadásával könnyedén publikálhatjuk az eredményt, például a WEB-en, de mint azt majd a későbbi példákban is látni fogjuk, az ilyen XML dokumentumokból visszanyerhetők az adatok.

A lekérdezésnél összesen 3 db táblát kapcsolunk össze, melyek a DBDEMOS alias alatt érhetők el. A lekérdezésben egy adat többször is előfordul, viszont az XML dokumentumba úgy írjuk ki az adatokat, hogy egy adat csak egyszer szerepeljen, ettől a dokumentum felépítése hierarchikus lesz.

A lekérdezés adataiban szerepelhetnek olyan karakterek, melyek egy XML dokumentumban speciális szerepet töltenek be. Ilyen például a "&" karakter is, ezért mielőtt az ilyen adatokat tárolnánk, ezeket a karaktereket ki kell cserélni a nekik megfelelő karakteregyedre. Ez a "&" karakter esetében "&". A cserét a GetXMLString függvény végzi el, amely jelen esetben csak ezt az egy karaktert figyeli:
function GetXMLString(s: string):string;
begin
  s:=StringReplace(s, '&', '&', [rfReplaceAll]);
  result:=s;
end;
A dokumentum létrehozása a Form-on található TMemo komponensben történik. Az AddLine eljárás a paraméterként megkapott sztringet hozzáadja a dokumentumhoz úgy, hogy előtte meghívja a GetXMLString függvényt.

A dokumentum létrehozása a FormOnCreate eseményénél történik meg.
Az első sor azonosítja a dokumentumot, a második sor egy megjegyzés, míg a harmadik sor a dokumentum nyitó eleme, amely az összes többi elemet tartalmazni fogja. Az ilyen típusú elemből csak egy létezhet egy dokumentumban. Az elemek nevét egyébként tetszőlegesen megválaszthatjuk, de esetünkben érdemes az adatbázis tábláinak és mezőinek nevét használni.
  AddLine('<?xml version="1.0" standalone="yes"?>');
  AddLine('<!-- Animare Software peldaprogram -->');
  AddLine('<customers>');
Megnyitjuk a lekérdezést, és végighaladunk rajta úgy, hogy közben kiolvassuk az aktuális rekord adatait, és eltároljuk a dokumentumban.
  with Query1 do begin
    Open;
    while not eof do begin
A customer elem a Customer tábla adatait tartalmazza, ezen belül lesznek az Orders tábla, és azon belül az Employee tábla adatai. A customer elemnek van egy attribútuma is, ennek neve azon. Erre a későbbiekben szükség lehet az elem egyértelmű azonosításához. A customer elemen belül a country, company és city elemek közé beillesztjük a megfelelő adatokat, majd mindegyik elemet lezárjuk. Ha olyan adatot akarunk eltárolni, aminek nem kell megjelennie, akkor azt attribútumként is megadhatjuk, hasonlóan az azon-hoz.
      AddLine(t1+'<customer azon="C'+FieldByName('CustNo').AsString+'">');
      AddLine(t2+'<company>'+GetXMLString(FieldByName('Company').AsString)+'</company>');
      AddLine(t2+'<city>'+GetXMLString(FieldByName('City').AsString)+'</city>');
      AddLine(t2+'<country>'+GetXMLString(FieldByName('Country').AsString)+'</country>');
      CustNo:=FieldByName('CustNo').AsInteger;
A CustNo változóban eltároltuk a customer azonosítóját, amit az alábbi ciklusban használunk fel. Az order elemnek szintén van egy azon attribútuma, az azonosításhoz. Az order elemen belül található az employee elem, és azon belül az ampno, firstname, lastname, phone, hiredate és salary elemek, mindegyik a megfelelő adatot közrefogva.
      repeat
        Memo1.Lines.Append(t2+'<order azon="O'+FieldByName('OrderNo').AsString+'">');
        AddLine(t3+'<employee>');
        AddLine(t4+'<empno>'+FieldByName('EmpNo').AsString+'</empno>');
…
        AddLine(t3+'</employee>');
        Memo1.Lines.Append(t2+'</order>');
        Next;
Ha a CustNo mező értéke különbözik a CustNo változó értékétől, akkor lezárjuk a customer elemet.
      until (CustNo<>FieldByName('CustNo').AsInteger) or eof;
      Memo1.Lines.Append(t1+'</customer>');
    end;
  end;
A dokumentum végén a customers elemet is le kell zárni. Ha ez is megvan, akkor elmentjük a fájlt a program könyvtárába "test.xml" néven. Ha ezt a fájlt megnyitjuk például az Internet Explorer-rel, akkor látni fogjuk a dokumentumban található adatok hierarchikus elrendezését, vagyis a dokumentum felépítését.
  Memo1.Lines.Append('</customers>');
  Memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'test.xml');
  Screen.Cursor:=crDefault;
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 395. 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 |