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ı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 01:05
Konum: istanbul

Mesaj gönderen dynamo » 30 Oca 2007 09:28

Kod: Tümünü seç

//ClientDataSet1.FileName:=ExtractFilePath(Application.ExeName)+'ogrenci.xml'; 
satırını iptal edince çalıştı.bu arada XMLTransform1 ile xml dosyasındaki kayıtlar dbgride alınabiliyor.

Kod: Tümünü seç


procedure TForm1.Button4Click(Sender: TObject);
begin
    XMLTransform1.TransformationFile := 'c:\xx\ToDp.xtr';
    XMLTransform1.SourceXmlFile := 'c:\xx\logo1.xml';
    ClientDataSet1.ProviderName:= 'XMLTransform1';
    ClientDataSet1.XMLData := XMLTransform1.Data;
    ClientDataSet1.Active;
end;

Code_Monster
Üye
Mesajlar: 16
Kayıt: 09 Tem 2010 09:36

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

Mesaj gönderen Code_Monster » 19 Oca 2012 01:22

radXE kullanıyorum xml databinding pasif gözüküyor kullanamıyorum. nasıl yüklerim ?

noname2040
Üye
Mesajlar: 5
Kayıt: 24 Ara 2013 05:26

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

Mesaj gönderen noname2040 » 25 Ara 2013 04:37

Yapanların eline sağlık bir konuda yardıma ihtiyacım var
efatura.xml dosyasını xml mapping tool ile datapack yapmaya çalıştığımda hata
alıyorum nasıl çözebilirim
bu adda : karakteri kullanılamaz diyor

osiso
Üye
Mesajlar: 46
Kayıt: 02 Eki 2007 04:56
Konum: İSTANBUL
İletişim:

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

Mesaj gönderen osiso » 29 Haz 2018 02:56

benim iç içe geçmiş ekteki xml dosyam var bunu databinding ile şablon oluşturdum fakat attribute içindeki verilere hatta tüm verileri çekmeye çalışıyorum burdan okuğum verileri de başka bir yere basacağım bu konu ile ilgili yardımlarınızı bekliyorum iç içe olduğu için xml veri dosyası sadece bir bölümü okuyabiliyor içindeki tüm verileri okuyamıyorum dosya aşağıda veriler.xml olarak verilmiştir yardımcı olan herkesten şimdiden Allah razı olsun diyorum iyi çalışmalar.
Dosya ekleri
veriler.rar
(3.33 KiB) 20 kere indirildi
Vurulup Tertemiz Alnından uzanmış Yatıyor
Bir Hilal Uğruna Ya Rab, Ne Güneşler Batıyor!

mkysoft
Kıdemli Üye
Mesajlar: 2981
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

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

Mesaj gönderen mkysoft » 29 Haz 2018 03:49

Bu dosyayı sağlayan sistem muhtemelen xsd dosyasını da sağlıyordur. xsd dosyasını edinin, eğer edinemiyorsanız xmlspy gibi programlarla xsd oluşturmayı deneyin. Sonrasında bu xsd'yi delpiye import ederek objeyi yaratın. Obje üzerinden serilize/deserilize yaparak xml'i oluşturun.

osiso
Üye
Mesajlar: 46
Kayıt: 02 Eki 2007 04:56
Konum: İSTANBUL
İletişim:

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

Mesaj gönderen osiso » 29 Haz 2018 04:02

hocam xsd dosyasını delphi nin kendi içindeki xml mapper xml mapping tool ile de oluşturabiliyorum onuda verebilirim size yani xsd dosyası da mevcut ama tüm veriler gelmiyor bir üst kırılım geliyor bir alt kırılım yine gelmiyor siz dosyaya bakarsanız anlarsınız yani ana kayıt var ana kayıta bağlı child kayıt var child kayıta bağlı başka bir child kayıt var iç içe geçmiş 4-5 tane yada daha fazla child lar var eğer işimizi görecekse ben xsd dosyasını size göndereyim bunlara rağmen yapamadım hatta xtr dosyası var

xml ektedir sorunum devam etmektedir.
Vurulup Tertemiz Alnından uzanmış Yatıyor
Bir Hilal Uğruna Ya Rab, Ne Güneşler Batıyor!

mkysoft
Kıdemli Üye
Mesajlar: 2981
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

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

Mesaj gönderen mkysoft » 30 Haz 2018 03:19

Dosyayı inceledim, bu nedenle xsd kullanın dedim. Hangi delphi versiyonu kullanıyorsunuz bilmiyorum. Obje yapmadan xml document üzerinde de ilerlemeniz mümkün. Yayınladığımız örnekleri incelemek fikir verebilir belki: https://github.com/isisedonusum

Kullanıcı avatarı
enes6635
Üye
Mesajlar: 21
Kayıt: 09 Eki 2018 10:09
İletişim:

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

Mesaj gönderen enes6635 » 07 Kas 2018 12:31

raised exception class EDOMParseError with message 'Sistem belirtilen dosyayı konumlandıramıyor Line 0

böyle bir hata veriyor
vkamadan yazdı:
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.
Haksız bir davada zirve olmaktansa, haklı bir davada zerre olmayı tercih ederim.

Bay_Y
Üye
Mesajlar: 115
Kayıt: 10 Mar 2014 11:12
Konum: İstanbul

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

Mesaj gönderen Bay_Y » 16 Kas 2018 06:49

Teşekkürler güzel bir konu ve anlatım olmuş. Elinize sağlık

Cevapla