XML Dosyalarıyla çalışmanın en zahmetsiz yolu. (Delphi7)

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:

XML Dosyalarıyla çalışmanın en zahmetsiz yolu. (Delphi7)

Mesaj gönderen vkamadan » 30 Mar 2005 12:01

Merhaba arkadaşlar,
çok uzun süredir XML dosyalarıyla başım belada idi.
ve sorunuma çözüm için yaptığım araştırmalar sonucunda çeşitli 3.parti parse bileşenleri ile uğraşmaktansa özellikle tekrarlayan veri kümeleri içeren XML dosyalarına erişimi oldukça basite indirgeyen "XML Data Binding" sihirbazını kullanarak oluşturacağımız bir Arayüz sayesinde XML dosyamız üzerinde aklımıza gelen her türlü işlemi yapabileceğiz.
Şimdi adım adım örnek XML Dosyamıza XML Data Binding kullanarak nasıl erişileceğine bir göz atalım ;

Örnek olarak kullnacağımız ogrenci.xml dosyasının içeriği aşağıdaki gibidir.

Kod: Tümünü seç

<?xml version="1.0" encoding="windows-1254"?>
<BILGI>
   <OgrenciNo>1229</OgrenciNo>
   <OgrenciSinifi>8A</OgrenciSinifi>
   <OgrenciAdi>Keramettin Sevcan</OgrenciAdi>
   <TCKNo>53564654454</TCKNo>
   <BolumKodu>ETR05</BolumKodu>
   <BolumAdi>Elektronik</BolumAdi>
</BILGI>
öncelikle XML Data Binding sihirbazını kullanarak arayüz unit mizi oluşturalım.
File / New / Other menüsüne girerek , NEW tabındaki XML Data Binding seçeneğini seçelim, karşımıza gelen ekranda Shema or XML Data File a XML dosyamızın konumu belirterek NEXT diyelim bir sonraki ekranda XML dosyasının içeriği bir ağaç diyagram şeklinde arayüzümüzün içinde oluşturulacak metod ve özellikleri düzenleyebilecek şekilde karşımız gelir. eğer varsayılan metod ve özellik isimleri hoşumuza gitmezse (XML mizin elementleri türkçe karakter içermekte özgürdür yani alan isimleri türkçe olabilir bu durumda Delphinin oluşturacağı metod isimlerinin hoşunuza gideceğini sanmıyorum) gerekli düzenlemeleri yaparak NEXT tuşuna basarak arayüzmüzün içeriğini görebileceğimiz bitiş ekranına gelelim ve FINISH tuşuna basarak arayüzümüzün oluşturulmasını sağlayalım.
oluşan arayüz unitinin içeriği aşağıdaki gibi oalcaktır;

Kod: Tümünü seç

unit ogrenci;

interface

uses xmldom, XMLDoc, XMLIntf;

type

{ Forward Decls }

  IXMLBILGIType = interface;

{ IXMLBILGIType }

  IXMLBILGIType = interface(IXMLNode)
    ['{C1587B9B-0D0E-49D2-BCFA-CAFF3AB5280C}']
    { Property Accessors }
    function Get_OgrenciNo: Integer;
    function Get_OgrenciSinifi: WideString;
    function Get_OgrenciAdi: WideString;
    function Get_TCKNo: Integer;
    function Get_BolumKodu: WideString;
    function Get_BolumAdi: WideString;
    procedure Set_OgrenciNo(Value: Integer);
    procedure Set_OgrenciSinifi(Value: WideString);
    procedure Set_OgrenciAdi(Value: WideString);
    procedure Set_TCKNo(Value: Integer);
    procedure Set_BolumKodu(Value: WideString);
    procedure Set_BolumAdi(Value: WideString);
    { Methods & Properties }
    property OgrenciNo: Integer read Get_OgrenciNo write Set_OgrenciNo;
    property OgrenciSinifi: WideString read Get_OgrenciSinifi write Set_OgrenciSinifi;
    property OgrenciAdi: WideString read Get_OgrenciAdi write Set_OgrenciAdi;
    property TCKNo: Integer read Get_TCKNo write Set_TCKNo;
    property BolumKodu: WideString read Get_BolumKodu write Set_BolumKodu;
    property BolumAdi: WideString read Get_BolumAdi write Set_BolumAdi;
  end;

{ Forward Decls }

  TXMLBILGIType = class;

{ TXMLBILGIType }

  TXMLBILGIType = class(TXMLNode, IXMLBILGIType)
  protected
    { IXMLBILGIType }
    function Get_OgrenciNo: Integer;
    function Get_OgrenciSinifi: WideString;
    function Get_OgrenciAdi: WideString;
    function Get_TCKNo: Integer;
    function Get_BolumKodu: WideString;
    function Get_BolumAdi: WideString;
    procedure Set_OgrenciNo(Value: Integer);
    procedure Set_OgrenciSinifi(Value: WideString);
    procedure Set_OgrenciAdi(Value: WideString);
    procedure Set_TCKNo(Value: Integer);
    procedure Set_BolumKodu(Value: WideString);
    procedure Set_BolumAdi(Value: WideString);
  end;

{ Global Functions }

function GetBILGI(Doc: IXMLDocument): IXMLBILGIType;
function LoadBILGI(const FileName: WideString): IXMLBILGIType;
function NewBILGI: IXMLBILGIType;

const
  TargetNamespace = '';

implementation

{ Global Functions }

function GetBILGI(Doc: IXMLDocument): IXMLBILGIType;
begin
  Result := Doc.GetDocBinding('BILGI', TXMLBILGIType, TargetNamespace) as IXMLBILGIType;
end;

function LoadBILGI(const FileName: WideString): IXMLBILGIType;
begin
  Result := LoadXMLDocument(FileName).GetDocBinding('BILGI', TXMLBILGIType, TargetNamespace) as IXMLBILGIType;
end;

function NewBILGI: IXMLBILGIType;
begin
  Result := NewXMLDocument.GetDocBinding('BILGI', TXMLBILGIType, TargetNamespace) as IXMLBILGIType;
end;

{ TXMLBILGIType }

function TXMLBILGIType.Get_OgrenciNo: Integer;
begin
  Result := ChildNodes['OgrenciNo'].NodeValue;
end;

procedure TXMLBILGIType.Set_OgrenciNo(Value: Integer);
begin
  ChildNodes['OgrenciNo'].NodeValue := Value;
end;

function TXMLBILGIType.Get_OgrenciSinifi: WideString;
begin
  Result := ChildNodes['OgrenciSinifi'].Text;
end;

procedure TXMLBILGIType.Set_OgrenciSinifi(Value: WideString);
begin
  ChildNodes['OgrenciSinifi'].NodeValue := Value;
end;

function TXMLBILGIType.Get_OgrenciAdi: WideString;
begin
  Result := ChildNodes['OgrenciAdi'].Text;
end;

procedure TXMLBILGIType.Set_OgrenciAdi(Value: WideString);
begin
  ChildNodes['OgrenciAdi'].NodeValue := Value;
end;

function TXMLBILGIType.Get_TCKNo: Integer;
begin
  Result := ChildNodes['TCKNo'].NodeValue;
end;

procedure TXMLBILGIType.Set_TCKNo(Value: Integer);
begin
  ChildNodes['TCKNo'].NodeValue := Value;
end;

function TXMLBILGIType.Get_BolumKodu: WideString;
begin
  Result := ChildNodes['BolumKodu'].Text;
end;

procedure TXMLBILGIType.Set_BolumKodu(Value: WideString);
begin
  ChildNodes['BolumKodu'].NodeValue := Value;
end;

function TXMLBILGIType.Get_BolumAdi: WideString;
begin
  Result := ChildNodes['BolumAdi'].Text;
end;

procedure TXMLBILGIType.Set_BolumAdi(Value: WideString);
begin
  ChildNodes['BolumAdi'].NodeValue := Value;
end;

end.
evet unitmizi kaydedelim. (örn:ogrenci.pas)
artık ogrenci.xml dosyasını referans alarak bu yapıdaki XML dosyaları üzerinde işlem yapabilme yeteneğine sahip olan IXMLBilgitType arayüzünü içeren unitimizi oluşturduğumuza göre örnek uygulamamızı geliştirebiliriz.
bu örnekte ogrenci.xml dosyasının içindeki alanları listbox a ekleyeceğiz.
Yeni bir proje oluşturup USES kısmına "ogrenci" unitini ekleyelim.
bir listbox ve bir buton ekleyelim, Butonun OnClick olay metoduna yazalım ;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
XMLBilgi:IXMLBILGIType;
begin
  XMLBilgi:= LoadBILGI('ogrenci.xml');
  ListBox1.Items.add('No    :'+IntToStr(XMLBilgi.OgrenciNo));
  ListBox1.Items.add('Sınıf :'+XMLBilgi.OgrenciSinifi);
  ListBox1.Items.add('Adı   :'+XMLBilgi.OgrenciAdi);
  ListBox1.Items.add('TCK No:'+XMLBilgi.TCKNo);
  ListBox1.Items.add('BKodu :'+XMLBilgi.BolumKodu);
  ListBox1.Items.add('BAdı  :'+XMLBilgi.BolumAdi);
end;
burada belirtmek istediğim bir nokta, oluşturduğumuz arayüz uniti varolan bir XMLDocument nesnesini alan yada belirteceğimiz bir konumdaki XML dosyasını yükleyen yada yeni bir XML dosyası oluşturmaya olanak sağlayan 3 adet global fonksiyon sunar bir ogrenci.xml dosyanısı yüklemek için function LoadBILGI(const FileName: WideString): IXMLBILGIType; fonksiyonu kullandık diğer global fonksiyonlar;
hazırdaki bir TXMLDocument nesnesini kullanarak işlem yapan;
function GetBILGI(Doc: IXMLDocument): IXMLBILGIType;
yapımıza uygun yeni bir XML oluşturan;
function NewBILGI: IXMLBILGIType;
fonksiyonlarınıda isteğe uygun kullanabiliriz.

ogrenci.xml , ogrenci.pas ve örnek projeyi içeren zip dosyasını siteye eklemesi için adminimize gönderiyorum.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr

Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7491
Kayıt: 09 Haz 2003 11:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek » 30 Mar 2005 12:47

Dosyaları siteye koydum : http://www.delphiturkiye.com/dsplus/m.p ... nciXML.zip (13 KB)

Teşekkürler.
En son mussimsek tarafından 07 Mar 2006 01:52 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1363
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Teşekkürler

Mesaj gönderen pro_imaj » 07 Haz 2005 03:45

Merhaba Dostum.

Makaleni inceledim. Çok mükemmel buldum.

eğer bu makaleyi okumadan XML ile çalışmaya başlasaydım bunca sıkıntının yanında bu yolu bulmak içinde baya zahmet hariyacaktım.

Ellerine sağlık.

Çalışmalarınıdaki başarılarının devamını dilerim.

Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________

veyselemre
Üye
Mesajlar: 5
Kayıt: 13 Haz 2005 10:23

Mesaj gönderen veyselemre » 20 Haz 2005 01:42

çalışma için teşekkür ederim.

xml oluşturmayı öğrenmek istiyorum fakat kaynak bulamadım.
yukarıdaki kodlarda load fonksiyonuyla ilgili kodları yazmışsın.
Aşağıdaki fonksiyonlarla ilgili örneği yazabilirsen çok yardımcı olacaksın şimdiden teşekkürler.

function LoadBILGI(const FileName: WideString): IXMLBILGIType;
function NewBILGI: IXMLBILGIType;

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan » 20 Haz 2005 02:59

Merhaba ,
Bir süredir yazmaya çalışıpta üşendiğim bir konuydu böylelikle vesile olunmuş oldu ,
Konuya başlamadan önce yukarıdaki makalede ele aldığımız XML dosyası son derece basit bir yapıya sahipti ve tekbir kayıttan oluşabiliyordu. Kayıt ekleme örneğimiz için aynı XML nin kök düğümünü NodeCollection haline getirecek düzenlemeyi yaparak dosyamıza istediğimiz kadar kayıdı ekleyebileceğimiz bir hale getirdik ve dosyamız şu hali aldı;

Kod: Tümünü seç

 <?xml version="1.0" encoding="windows-1254" ?> 
- <BILGILER>
- <BILGI>
  <OgrenciNo>125</OgrenciNo> 
  <OgrenciSinifi>9A</OgrenciSinifi> 
  <OgrenciAdi>Volkan KAMADAN</OgrenciAdi> 
  <TCKNo>41545</TCKNo> 
  <BolumKodu>PPP</BolumKodu> 
  <BolumAdi>Programlama</BolumAdi> 
  </BILGI>
  </BILGILER>
ve dolayısıyla oluşan arabirimdede tüm düğümleri kapsayan XMLNodeCollection tipinde ilave bir nesnemiz oldu. yukarıdaki şekildeki bir XML yi XMLDataBindingyardımı kullnarak gerekli arabirimi yarattırdığımızda aşağıdaki sınıf ortaya çıkıyor ;

Kod: Tümünü seç

unit ogrenci;

interface

uses xmldom, XMLDoc, XMLIntf;

type

{ Forward Decls }

  IXMLBILGILERType = interface;
  IXMLBILGIType = interface;

{ IXMLBILGILERType }

  IXMLBILGILERType = interface(IXMLNodeCollection)
    ['{ED1FFEE0-BCA0-4976-9F5B-D031C5A55F99}']
    { Property Accessors }
    function Get_BILGI(Index: Integer): IXMLBILGIType;
    { Methods & Properties }
    function Add: IXMLBILGIType;
    function Insert(const Index: Integer): IXMLBILGIType;
    property BILGI[Index: Integer]: IXMLBILGIType read Get_BILGI; default;
  end;

{ IXMLBILGIType }

  IXMLBILGIType = interface(IXMLNode)
    ['{2A4D392C-C58B-4F56-AF43-2E6DE8B09E3C}']
    { Property Accessors }
    function Get_OgrenciNo: WideString;
    function Get_OgrenciSinifi: WideString;
    function Get_OgrenciAdi: WideString;
    function Get_TCKNo: WideString;
    function Get_BolumKodu: WideString;
    function Get_BolumAdi: WideString;
    procedure Set_OgrenciNo(Value: WideString);
    procedure Set_OgrenciSinifi(Value: WideString);
    procedure Set_OgrenciAdi(Value: WideString);
    procedure Set_TCKNo(Value: WideString);
    procedure Set_BolumKodu(Value: WideString);
    procedure Set_BolumAdi(Value: WideString);
    { Methods & Properties }
    property OgrenciNo: WideString read Get_OgrenciNo write Set_OgrenciNo;
    property OgrenciSinifi: WideString read Get_OgrenciSinifi write Set_OgrenciSinifi;
    property OgrenciAdi: WideString read Get_OgrenciAdi write Set_OgrenciAdi;
    property TCKNo: WideString read Get_TCKNo write Set_TCKNo;
    property BolumKodu: WideString read Get_BolumKodu write Set_BolumKodu;
    property BolumAdi: WideString read Get_BolumAdi write Set_BolumAdi;
  end;

{ Forward Decls }

  TXMLBILGILERType = class;
  TXMLBILGIType = class;

{ TXMLBILGILERType }

  TXMLBILGILERType = class(TXMLNodeCollection, IXMLBILGILERType)
  protected
    { IXMLBILGILERType }
    function Get_BILGI(Index: Integer): IXMLBILGIType;
    function Add: IXMLBILGIType;
    function Insert(const Index: Integer): IXMLBILGIType;
  public
    procedure AfterConstruction; override;
  end;

{ TXMLBILGIType }

  TXMLBILGIType = class(TXMLNode, IXMLBILGIType)
  protected
    { IXMLBILGIType }
    function Get_OgrenciNo: WideString;
    function Get_OgrenciSinifi: WideString;
    function Get_OgrenciAdi: WideString;
    function Get_TCKNo: WideString;
    function Get_BolumKodu: WideString;
    function Get_BolumAdi: WideString;
    procedure Set_OgrenciNo(Value: WideString);
    procedure Set_OgrenciSinifi(Value: WideString);
    procedure Set_OgrenciAdi(Value: WideString);
    procedure Set_TCKNo(Value: WideString);
    procedure Set_BolumKodu(Value: WideString);
    procedure Set_BolumAdi(Value: WideString);
  end;

{ Global Functions }

function GetBILGILER(Doc: IXMLDocument): IXMLBILGILERType;
function LoadBILGILER(const FileName: WideString): IXMLBILGILERType;
function NewBILGILER: IXMLBILGILERType;

const
  TargetNamespace = '';

implementation

{ Global Functions }

function GetBILGILER(Doc: IXMLDocument): IXMLBILGILERType;
begin
  Result := Doc.GetDocBinding('BILGILER', TXMLBILGILERType, TargetNamespace) as IXMLBILGILERType;
end;

function LoadBILGILER(const FileName: WideString): IXMLBILGILERType;
begin
  Result := LoadXMLDocument(FileName).GetDocBinding('BILGILER', TXMLBILGILERType, TargetNamespace) as IXMLBILGILERType;
end;

function NewBILGILER: IXMLBILGILERType;
begin
  Result := NewXMLDocument.GetDocBinding('BILGILER', TXMLBILGILERType, TargetNamespace) as IXMLBILGILERType;
end;

{ TXMLBILGILERType }

procedure TXMLBILGILERType.AfterConstruction;
begin
  RegisterChildNode('BILGI', TXMLBILGIType);
  ItemTag := 'BILGI';
  ItemInterface := IXMLBILGIType;
  inherited;
end;

function TXMLBILGILERType.Get_BILGI(Index: Integer): IXMLBILGIType;
begin
  Result := List[Index] as IXMLBILGIType;
end;

function TXMLBILGILERType.Add: IXMLBILGIType;
begin
  Result := AddItem(-1) as IXMLBILGIType;
end;

function TXMLBILGILERType.Insert(const Index: Integer): IXMLBILGIType;
begin
  Result := AddItem(Index) as IXMLBILGIType;
end;

{ TXMLBILGIType }

function TXMLBILGIType.Get_OgrenciNo: WideString;
begin
  Result := ChildNodes['OgrenciNo'].Text;
end;

procedure TXMLBILGIType.Set_OgrenciNo(Value: WideString);
begin
  ChildNodes['OgrenciNo'].NodeValue := Value;
end;

function TXMLBILGIType.Get_OgrenciSinifi: WideString;
begin
  Result := ChildNodes['OgrenciSinifi'].Text;
end;

procedure TXMLBILGIType.Set_OgrenciSinifi(Value: WideString);
begin
  ChildNodes['OgrenciSinifi'].NodeValue := Value;
end;

function TXMLBILGIType.Get_OgrenciAdi: WideString;
begin
  Result := ChildNodes['OgrenciAdi'].Text;
end;

procedure TXMLBILGIType.Set_OgrenciAdi(Value: WideString);
begin
  ChildNodes['OgrenciAdi'].NodeValue := Value;
end;

function TXMLBILGIType.Get_TCKNo: WideString;
begin
  Result := ChildNodes['TCKNo'].Text;
end;

procedure TXMLBILGIType.Set_TCKNo(Value: WideString);
begin
  ChildNodes['TCKNo'].NodeValue := Value;
end;

function TXMLBILGIType.Get_BolumKodu: WideString;
begin
  Result := ChildNodes['BolumKodu'].Text;
end;

procedure TXMLBILGIType.Set_BolumKodu(Value: WideString);
begin
  ChildNodes['BolumKodu'].NodeValue := Value;
end;

function TXMLBILGIType.Get_BolumAdi: WideString;
begin
  Result := ChildNodes['BolumAdi'].Text;
end;

procedure TXMLBILGIType.Set_BolumAdi(Value: WideString);
begin
  ChildNodes['BolumAdi'].NodeValue := Value;
end;

end.
evet yeni bir döküman oluşturmak iin aşağıdaki adıları takip edelim;

Yeni bir uygulama oluşturun ve USES a ogrenci.pas (Interface uniti) ni ekleyin , Forma Internet Tabındaki TXMLDocument nesnesini ekleyin ve referans alacağımız örnek ogrenci.xml dosyasını FileName özelliğine belirtin.
Sonra bir buton ekleyin ve OnClick ine Aşağıdaki kodu yazın,

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
XMLBilgi:IXMLBILGILERType;
XMLAltBilgi:IXMLBILGIType;
begin
  XMLBilgi:=GetBILGILER(XMLDocument1);
  XMLBilgi.Clear;
  XMLAltBilgi:=XMLBilgi.Insert(XMLBilgi.Count);
  XMLAltBilgi.OgrenciNo:='125';
  XMLAltBilgi.OgrenciSinifi:='9A';
  XMLAltBilgi.OgrenciAdi:='Volkan KAMADAN';
  XMLAltBilgi.TCKNo:='41545';
  XMLAltBilgi.BolumKodu:='PPP';
  XMLAltBilgi.BolumAdi:='Programlama';
  XMLDocument1.SaveToFile('deneme.xml'); 
end;
Kodu inceleyecek olursak ;
GetBILGILER(TXMLDocument):IXMLBILGILER fonsiyonu kullanarak forma eklediğimiz TXMLDocument nesnesine atadığımız dosyanın içeriğini arabirmimize yüklüyoruz , Daha sonra Clear metoduyla dökküman içeriğini boşaltıyoruz ,
IXMLBILGI tipindeki XMLAltBilgi değişkenimize yaratılacak yeni düğüm grubunun değerini atıyoruz XMLAltBilgi:=XMLBilgi.Insert(XMLBilgi.Count) burada Index belirtmemiz isteniliyor bizde index = n- 1 olduğundan ve boş bir belgenin ilk elemanı indeksi 0 olacağında XMLBilgi düğüm koleksiyunun eleman sayısını belirtiyoruz.
Son olarak gerekli alanara atamaları yapıp ,
TXMLDocument ın SaveToFile metodunu kullaran yeni dosya adımızı verip XML dosyamızı kaydediyoruz.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr

veyselemre
Üye
Mesajlar: 5
Kayıt: 13 Haz 2005 10:23

Mesaj gönderen veyselemre » 20 Haz 2005 04:01

Bu kadar süratle cevapladığınız için çok teşekkür ederim.

Kullanıcı avatarı
AReS
Üye
Mesajlar: 86
Kayıt: 25 Haz 2005 03:58

S.a

Mesaj gönderen AReS » 14 Eyl 2005 07:32

Üstat verileri XML olarak dışarı attıgımda bu şekilde alabiliyorum peki dbgrid le dönen sonucu xml olarak kaydetmek istersem nası bir yol izlicem. Yoksa sen söyledin uykulu uykulu ben mi anlayamadım. Yardımcı olursana sevinirim sana bol bol dua ederim :lol:

Kullanıcı avatarı
AReS
Üye
Mesajlar: 86
Kayıt: 25 Haz 2005 03:58

Sorgudan dönen sonucu XML olarak kaydetme de sorun

Mesaj gönderen AReS » 14 Eyl 2005 08:02

S.A
Üstat Kolay gelsin

Kod: Tümünü seç

<?xml version="1.0" encoding="windows-1254"?>
<Deneme_VTP>
	<DenemeDataRows>
		<Deneme_ROW>
			<Hasta>19500</Hasta>
			<Test>28</Test>
			<Code>1460</Code>
			<Sonuc>15</Sonuc>
			<Deger>207</Deger>
		</Deneme_ROW>
	</DenemeDataRows></Deneme_VTP>
XML dosyam bu şekilde olacak
ben veri tabanından verileri DBgrid e çekiyorum griddeki bilgileri bu XML şemasına göre kayıt ettirmek istiyorum ama yapamadım. :oops: yardımcı olursan sevinirim. :shock:

Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 05 Eki 2003 11:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined » 14 Eyl 2005 10:37

http://www.drbob42.com/examines/examin25.htm

Burda değinildiği gibi,
Delphi'nin yanında gelen Xml Mapper la, xmlToDataset, DatasetToXml Transformation dosyaları oluşturup Bu dosyaları TClientDataSetle bağlı TxmlTransformProviderlarda kullanarak belli bir formattaki Xml dosyalarını adete bir Tablemış gibi kullanabilirsin. Bence Xml Data Binding toolundan daha kullanışlı bişey.
Bu arada dönüşüm paketlerini hazırlarken veri tiplerini string uzunluklarını dikkatli ver. Yoksa ilerde sorun çıkartıyor stringi yarıda kesme gibi.

Kolay gelsin...

Kullanıcı avatarı
AReS
Üye
Mesajlar: 86
Kayıt: 25 Haz 2005 03:58

Merhaba

Mesaj gönderen AReS » 21 Eyl 2005 06:13

Üstad yardımların için teşeküürler.Bu konu üzerine biraz çalışma yaptım ama tıkandım kaldım ya ben yapmak istediğim şeyi anlatamıyorum yada kafa doldu saksı halini aldı :(

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan » 21 Eyl 2005 06:19

TransfromProvider ler işinizi görmedimi?
yada tıkandığınız nokta tam olarak neresi?
Volkan KAMADAN
www.polisoft.com.tr

Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 12:14

Mesaj gönderen mucar » 24 Eyl 2005 08:16

Kod: Tümünü seç

adotable1.savetofile('c:\deneme.xml',pfXML);
okurken de loadfromfile. Bir de böyle yöntem var. Ama format olarak istediğiniz gibi olmayabilir.

Ayrıca belirtmek istiyorum, faydalı bir yazı olmuş. Teşekkür ederiz.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"

Kullanıcı avatarı
fatih_yenigun
Üye
Mesajlar: 2
Kayıt: 19 Ağu 2005 08:38
Konum: Ereğli/Konya

Mesaj gönderen fatih_yenigun » 06 Kas 2006 05:42

üstadım ellerine sağlık allah razı olsun tek kelimeyle mükemmel çalışma

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan » 06 Kas 2006 05:51

Biraz olsun faydalı olabildiysem ne mutlu bana,
rica ederim iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr

Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 01:05
Konum: istanbul

Mesaj gönderen dynamo » 29 Oca 2007 05:37

http://www.delphiturkiye.com/dsplus/m.p ... nciXML.zip adresinden dosyayı indirdim.delphi->XML Mapping Tool dan ogrenci.xml dosyasının .xtr dosyalarını oluşturdum(ToDp.xtr ile ToXml.xtr).

dbgrid te ogrenci.xml dosyasını göstermek için kullandığım kod:

Kod: Tümünü seç


procedure TForm1.Button2Click(Sender: TObject);
begin
    ClientDataSet1.Close;
    ClientDataSet1.ProviderName:='XMLTransformProvider1';
    XMLTransformProvider1.CacheData := False;
    XMLTransformProvider1.TransformRead.TransformationFile:=ExtractFilePath(Application.ExeName)+'toDp.xtr';
    XMLTransformProvider1.TransformWrite.TransformationFile:=ExtractFilePath(Application.ExeName)+'toXML.xtr';
    XMLTransformProvider1.XMLDataFile:=ExtractFilePath(Application.ExeName)+'ogrenci.xml';
    ClientDataSet1.FileName:=ExtractFilePath(Application.ExeName)+'ogrenci.xml';
    ClientDataSet1.Open;
end;


"mismatch in datapacket" hatası verdi. başka xml dosyalarında denedim.hepsinde aynı hatayı veriyor.bu kodda eksik/yanlış olan nedir ?

Cevapla