ClientDataSet ve XMLTransformProvider İle XML Okumak

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen vkamadan »

Merhaba,
ClientDataSet ile XMLTransformProvider nesnelerini kullanarak basit bir şekilde düz yapıda bir XML dosyasını DataSet olarak kullanmayı örnekleyen bir yazı hazırlama düşüncesi epeydir aklımda vardı bugüne nasipmiş umarım faydalı olur,

Gerekli Araçlar
-Delphi 7
-Delphi 7 ile birlikte gelen XML Mapper aracı
-Örnek uygulamamız için gerekli basit bir XML (test.xml olarak anılacak)

test.xml in yapısı

Kod: Tümünü seç

<?xml version="1.0" encoding="iso-8859-9"?>
<VERI>
<KAYIT>
<alan1>VOLKAN</alan1>
<alan2>KAMADAN</alan2>
</KAYIT>
<KAYIT>
<alan1>SEMİH</alan1>
<alan2>AYDIN</alan2>
</KAYIT>
</VERI>
ClientDataSet ile basit yapıdaki bir XML dosyasını okumak için XML dosyamızın yapısı hakkında ClientDataSet e bilgi vermesi için XMLTransformProvider (XML Çevirim Sağlayıcısı) a ihtiyacımız olucaktır, bu dosyaların uzantısı XTR dir, normalde elimizde bu dosya bulunmaz oluşturamak için delphi bize kullanışlı bir araç alan XML Mapper ı sunar, örnek xml dosyamızı aşağıdaki gibi XML Mapper da açalım

Resim

Sonra aşağıdaki şekillerdeki adımları takip ederek gerekli XML Transform Dosyamızı elde edelim.

Resim
Resim
Resim
Resim

Artık elimizde XTR dosyamız olduğuna göre örneğimizin zor olan kısmını bitirdik geriye forma TClientDataset , TXMLTransformProvider , TDataSource ve TDbGrid koyup veriyi okumak kaldı.

Resim

Kod: Tümünü seç

XMLTransformProvider1.TransformRead.TransformationFile:='d:\test_dp.xtr';
XMLTransformProvider1.XMLDataFile:='d:\test.xml';

ClientDataSet1.ProviderName:='XMLTransformProvider1';
Yukarıdaki gibi nesnelerimize gerekli atamaları yapalım.
Resim
Resim

Evet artık ClientDataset imizi Active yapınca XML dosyamız içindeki bilgiler gridimize dolacaktır gerisi TDataSet için bildiğiniz işlemlerdir.
Kolay gelsin.
En son vkamadan tarafından 27 Haz 2009 03:15 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Volkan KAMADAN
www.polisoft.com.tr
rahim123
Üye
Mesajlar: 29
Kayıt: 03 Ara 2003 05:49

Mesaj gönderen rahim123 »

baba büyüksünnnnnnnnnn bu kadar güzel anlatım başka yerde görmedim yani ... teş.ediyorum ilgine kafayı sıyırmaktan kurtardın beni
.net icat oldu mertlik bozuldu
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Rica ederim,
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

@Volkan iyi bir çalışma, emeğine sağlık, devamını bekleriz.
Siteden araştırmadım ama birde Xml oluşturma teknikleri ile ilgili makaleler yayınlasan çok işime yarayacak. :lol: :shock:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

conari yazdı:@Volkan iyi bir çalışma, emeğine sağlık, devamını bekleriz.
Siteden araştırmadım ama birde Xml oluşturma teknikleri ile ilgili makaleler yayınlasan çok işime yarayacak. :lol: :shock:
Merhaba,

Kod: Tümünü seç

XMLTransformProvider1.TransformRead.TransformationFile:='d:\test_dp.xtr';
İfadesiyle biz Provider için Okuma Transformunu belirttik, aynısını ,

Kod: Tümünü seç

XMLTransformProvider1.TransformWrite.TransformationFile:='d:\test_dp.xtr';
Olarak eklerseniz yazma transformunuda belirtmiş olursunuz ve DataSet in Append, Edit, Insert gibi metodlarıyla basit bir şekilde veri girişini sağlamış olurusunuz.

İlave olarak , Dinamik yapıda XML ler oluşturmak isterseniz daha önce yayınladığım DBtoXML nesnesinden yararlanabilirsiniz.
viewtopic.php?t=20188

Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Teşekkür ederim, incelemeye başlayacağım.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

@Volkan Sunduğun makale ile elimdeki xml i gridde göstermek istedim.

Fakat sadece Field isimleri geldi bilgileri göremedim
makaleni aynen sırası ile yapmaya çalıştım , nereyi atlamış olabilirim.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

@conari , Veriler hiçmi görünmüyor Yoksa MEMO şeklindemi görünüyor?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Hızlı dönüşün için teşekkürler
Sanırım ilk yaptığım xtr dosyasının üstüne tekrar yazmıştım. ondan dolayı format bozulmuş olabilir. düzeldi.

Sorumu farklı bir şeye çeksem.
XML mapper kullanmadan delphi içinde bu işlemleri yapabilirmiyiz?
yani xml yolu gösterildiğin de xtr dosyasını v.s. oluşturabilirmiyiz. :lol:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

@conari ,
bunun pratik bir şekilde yapılabilceğini düşünmüyorum, biraz araştıra yaptım konuyla ilgili, delphi yardımında bile derki Transformation dosyasını xmlmapper ile oluştur, TXMLTransform nesnesi de bu mapper ile oluşan xtr den datapacked oluşturuyormuş bir kaç test yaptım TXMLTransform beni ümitlendirdi ancak Help tede öğrendim maalesef yapılamıyor.İllede elimizde Shema olucak.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

:roll: :cry:
her seferinde XML mapper den yola çıkmak :?: Kullanıcıda bu program yok nasıl yapacak ki.
İlgin ve verdiğin bilgiler için teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

@conari , XML Mapper aracınıda delphide yapmışlar sonuçta bir şekilde yapılır ama hali hazırda bir sınıf sunmamış adamlar nedense üzerinde biraz çalışmak lazım.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
ClientDataset ile kullanabilen TDataSetField tipinde alanlar olabilir, yani muhtemelen bahsettiğiniz durum budur, XML ana detay, anadetay-detay gibi yapılarda veri barındırıyorsa oluşturduğunuz XTR , bunları NestedNodes olarak görecektir ve ilgili veritipi TdatasetField olucaktır, buda demek oluyorki,

Kod: Tümünü seç

 <MUSTERILER>
    <MUSTERI>
      <ADI>VOLKAN</ADI>
      <SOYADI>KAMADAN</SOYADI>
      <TEL>121215454</TEL>
        <ADRESLER>
           <ADRES>
             <TIP>EV</TIP>
             <BILGI>DENEME ADRESİ</BILGI>
           </ADRES>
           <ADRES>
             <TIP>İŞ</TIP>
             <BILGI>DENEME ADRESİ</BILGI>
           </ADRES>
        </ADRESLER>
    </MUSTERI>
    <MUSTERI>
      <ADI>ALİ</ADI>
      <SOYADI>VELİ</SOYADI>
      <TEL>1212004</TEL>
        <ADRESLER>
           <ADRES>
             <TIP>EV</TIP>
             <BILGI>DENEME ADRESİ2</BILGI>
           </ADRES>
           <ADRES>
             <TIP>İŞ</TIP>
             <BILGI>DENEME ADRESİ2</BILGI>
           </ADRES>
        </ADRESLER>
    </MUSTERI>
 </MUSTERILER>
şöyle bir XML olsun , burada NESTEDNODE 2 adet var, birisi MUSTERI , Diğeri ADRES, yani her müşterinin içinde sınırsız adres kaydı olabilir, ClientDataset te ADRES sahasının tipi TDataSetField olucaktır ve içindeki adresler bilgisine şu örnekteki gibi ulaşabilirsin,

Kod: Tümünü seç

while not ClientDataSet1ADRES.NestedDataSet.Eof do
 begin       ShowMessage(ClientDataSet1ADRES.NestedDataSet.FieldByName('TIP').AsString);
    ClientDataSet1ADRES.NestedDataSet.Next;
 end;
gibi..
Umarım açıklayıcı olmuştur, kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
ilkeryesiloglu
Üye
Mesajlar: 18
Kayıt: 07 Haz 2004 09:04
Konum: Mersin
İletişim:

Bu işlem ile okuyoruz peki write işlemi aynı şekilde oluyorm

Mesaj gönderen ilkeryesiloglu »

Bu yolla okumak harika ama bir bilgiyi düzelttiğimizde kayıtta hata veriyor
Bunuda aynı yol ile yapabiliyormuyuz.
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Mesaj gönderen comfort »

Çok işime yaradı sağolasın...
Cevapla