Delphi - Az XML Mapper segédprogram használata

XML Mapper 1. rész

forráskód letöltése
Az XML szabvány a fejlesztések területén egyre inkább tért hódít, és ez meg is látszik a Delphi 6-os verziójában is. Rengeteg olyan új komponenst találunk, amelyek ilyen vagy olyan módon használják ezt a formátumot. Bizonyos feladatoknál előfordulhat, hogy a feladatok megoldása érdekében az egyik XML formátumból egy másik formátumba kell konvertálnunk adatokat, és ilyenkor szükség van egy ún. transzformációs fájlra. Ezt a fájlt a Delphi 6-ban megjelent XML Mapper segédprogrammal állíthatjuk elő. Mivel ennek a programnak a használata első ránézésre kicsit bonyolultnak tűnhet, ezért ebben a most induló cikksorozatban bemutatjuk a használatát.
Az XML Mapper program a Delphi Tools menüjéből indíthatjuk el. Alapvetően azt a feladatot látja el, hogy egy tetszőleges formátumú XML dokumentumból egy adatcsomag (DataPacket) XML dokumentumot állít elő, vagy éppen fordítva, az adatcsomagból egy XMl dokumentumot. Ehhez egy ún. transzformációs fájlt kell előállítania, amely egy olyan speciális XML dokumentum, amely a két dokumentum közötti konverziót írja le.
Az XML Mapper programmal tehát olyan transzformációs fájlokat tudunk előállítani, amelyek a következő feladatokat látják el:
  • XML dokumentum konvertálása adatcsomaggá
  • XML dokumentum konvertálása Delta adatcsomaggá, ami rekordok beszúrását vagy törlését teszi lehetővé
  • XML dokumentumok előállítása, amely egy lekérdezés paramétereit tartalmazza
  • adatcsomagból XML dokumentum előállítása
A felhasználói felületet három jól elkülöníthető részre oszthatjuk:
  • baloldalon láthatjuk az XML dokumentum szerkezetét
  • a középső részen a kiválasztott csomópont adatait, valamint a leképezés információit tartalmazza
  • a jobboldali részen látható az adatcsomag szerkezete
Adatcsomagból XML dokumentumot előállító transzformációs fájl készítése
Ha kliens adatkészletet használunk egy programban (ClientDataSet), akkor annak XMLData propertyjén keresztül elérhetjük a teljes adatkészletet XML adatcsomag (DataPacket) formátumban. Az elkészítendő transzformációs fájllal az ilyen adatcsomagokat fogjuk tudni tetszőleges formátumú XML fájlba konvertálni.
Ahhoz, hogy a feladatot meg tudjuk oldani, szükségünk lesz az adatcsomag szerkezetét tartalmazó XML fájlra. Erre használhatjuk az XMLData property tartalmát is, ha lementjük egy fájlba. i most a példa kedvéért a DBDEMOS alias alatt található adatbázisok egyikét fogjuk felhasználni (country), mivel ezek XML adatcsomag formátumban is elérhetők.
Ha megvan az adatcsomag fájlunk, akkor az XML Mapper programban a Mapping Pane ablak Mapping oldalán kapcsoljuk be a Datapacket to XML kapcsolót.
Ezután a jobboldali ablakban (Datapacket) nyissuk meg az adatcsomagot tartalmazó fájlt. Ehhez kattintsunk jobb gombbal az ablakban, és válasszuk az Open Datapacket menüpontot. Ha sikerült megnyitni, akkor a jobboldali ablakban az alábbi képet kell látnunk (country.xml használata esetén):
Most ki kell jelölnünk azokat a mezőket, amelyeket az XML dokumentumba akarunk konvertálni. Az elemeket kiválaszthatjuk egyenként is dupla kattintással, de ha mindet szeretnénk, akkor használjuk a Ctrl+A billentyűket.
A Transformátion lapon megjelentek a kiválasztott mezők:
Most kattintsunk a Datapacket ablakban a jobb gombbal, és válasszuk ki a Create XML from Datapacket menüpontot. Ennek hatására megjelenik egy ablak, ahol megadhatjuk a gyökér csomópont nevét, illetve azt, hogy az egyes mezőkhöz az XML dokumentumban milyen nevű csomópontok fognak tartozni. Ha jobb gombbal kattintunk a listában, akkor egy kis menü jelenik meg, amelyből kiválaszthatjuk, hogy a mezők adatai, mint a lista első elemének attribútumai, vagy mint ennek gyermek elemei (és az adatok, mint szöveg) legyenek-e létrehozva. Az első esetben a következő eredményt fogjuk kapni:
<?xml version="1.0"?>
<Countries><Country Name="Argentina" Capital="Buenos Aires" Continent="South America" Area="2777815" Population="32300003"/>
...
Ezzel szemben a ha a mezők elemként lesznek konvertálva, akkor az eredmény (fontos, hogy az XM LMapper nemtördeli így be a dokumentumot, mis is csak a jobb olvashatóság kedvéért tettük meg):
<?xml version="1.0"?>
<COUNTRIES>
  <Country>
    <Name>Argentina</Name>
    <Capital>Buenos Aires</Capital>
    <Continent>South America</Continent>
    <Area>2777815</Area>
<Population>32300003</Population>
</Country>
<Country>
  <Name>Bolivia</Name>
...
Válasszuk ki a nekünk megfelelő formátumot, adjuk meg a csomópontok (vagy attribútumok) nevét, és kattintsunk a Create gombra. Ekkor a baloldali ablakban (Document) megjelenik az XML dokumentum szerkezete. Ha akarjuk ezt a szerkezetet elmenthetjük a File menü Save/XML Document menüpontjával, de ekkor a fájlban csak teszt adatok lesznek, nem pedig az eredeti adatcsomag tartalma. Ha azt szeretnénk elmenteni, akkor kattintsunk a Transformation ablakban a Create and test transformation feliratú gombra, és a megjelenő ablakból elmenthetjük a teljes dokumentumot.
Viszont amire nekünk most szükségünk van, az a transzformációs fájl. Ezt mentsük el a File menü Save/Transformation menüpontjával, a fájl neve legyen DpToCountry.xtr.
Most nézzük meg, hogy hogyan tudjuk ezt Delphi-ben felhasználni. A mellékelt példaprogram a Country.db adatbázis táblát jeleníti meg, amit akár szerkeszthetünk is.
A ClientDataSet1 komponens XMLData property-jének tartalmát a Memo1 komponensbe másoljuk, majd elmentjük a „country_dp.xml’ nevű fájlba, de csak azért, hogy a böngészőben is megjeleníthessük.
Egy XMLTransform komponens segítségével a Memo1 komponensbe másolt adatcsomagot konvertáljuk a megfelelő formátumú XML dokumentumba. A transzformációs fájl nevét az XMLTransfrom komponens TransformationFile property-jében kell megadnunk.
A cikksorozat ezen részében azt vizsgáljuk meg, hogy miként tudunk egy XML dokumentumból adatcsomagot előállító transzformációs fájlt készíteni.

XML Mapper cikksorozat

Az XML Mapper segédprogram használata - XML Mapper 1. rész

Az XML Mapper segédprogram - XML Mapper 2. rész