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!
Üye
Mesajlar: 26
Kayıt: 23 Kas 2005 01:45

ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen » 18 Oca 2013 11:07

Merhabalar yukarıdaki yazılanları okudum çok güzel bir çalışma olmuş.
Benim problemim Türkçe karakterle ilgili. "C:\v\veri.xml" adresindeki datayı XMLMApper'ı da kullanarak XMLTransformProvider1, ClientDataSet1, DBGrid1 ve DataSource1 yardımı ile DBGrid1 içerisinde verileri gösteriyorum. XMLMapper da .xtr dosyasını hazırladıktan sonra "Create and test transformation" tuşuna tıkladığımda türkçe karakterler düzgün gözüküyor. Fakat DBGrid1 içerisinde türkçe karakterlerde sorun çıkıyor. Bunu çözmek için "veri.xml" dosyasını notped de açarak ilk satırını aşağıdaki şekillerde değiştirip

<?xml version="1.0" encoding="iso-8859-9"?>
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="windows-1254"?>

farklı kaydetten kodlamasını da ona göre değiştirip kaydetmeme rağmen sonuç değişmedi yardımlarınızı bekliyorum.

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

Re: ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen vkamadan » 18 Oca 2013 01:14

merhaba ,
Delphi Xe ve Xe2 de yaptığım denemelerde Türkçe karakter sorununu yaşadım ve sonuca varamadım fakat öncesi herhangi bir versiyonda (şuan test ettiğim D2007) türkçe karakter sorunu yaşamadım. Unicode konusuyla ilgili olabilir.
Volkan KAMADAN
www.polisoft.com.tr

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

Re: ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen mkysoft » 18 Oca 2013 01:51

Utf-8 dışında bir kodlama kullanmanıza gerek yok. Notepad++ (ücretsiz) gibi programlar kullanarak dosyası UTF-8 olarak kaydedin ve BOM bilgisi eklemeyin. Normal notepad nasıl kaydediyor bilmiyorum.

Üye
Mesajlar: 26
Kayıt: 23 Kas 2005 01:45

Re: ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen » 19 Oca 2013 02:03

Volkan Bey
dediğiniz gibi Delphi XE2 kullanıyorum. Türkçe karakter sorununu çözemedim. Sayın mkysoft dosyayı UTF-8 olarak kayıt ettim ayrıca kodlamadan da UTF-8 i seçtim ama sonuç değişmedi. çözebilirsem sizlerle de paylaşırım.

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

Re: ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen vkamadan » 19 Oca 2013 02:13

merhaba ,
aşağıdaki iki linkte konuyla ilgili çözümler yazılmış test etme vaktim olmadı işinize yarayabilir.

http://www.experts-exchange.com/Program ... 00416.html


https://forums.embarcadero.com/thread.j ... adID=65522
Volkan KAMADAN
www.polisoft.com.tr

Üye
Mesajlar: 26
Kayıt: 23 Kas 2005 01:45

Re: ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen » 21 Oca 2013 06:16

Volkan Bey,
verdiğiniz https://forums.embarcadero.com/thread.j ... adID=65522 linkteki bilgiler ile sorunum çözüldü.
Öncelikle aşağıdaki procedure'ü forma tanıtıyoruz.

Kod: Tümünü seç

Procedure OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
Sonra ClientDataSet1'in After open olayına aşağıdaki kodu yazıyoruz.

Kod: Tümünü seç

procedure TForm2.ClientDataSet1AfterOpen(DataSet: TDataSet);
var
i:integer;
f:TField;
begin
for i:=0 to dataset.fields.count-1 do
begin
f:=dataset.fields[i];
f.ongettext:=Self.OnGetText;
end;
end;
Yukarıdaki kodun altınada aşağıdaki procedure'ü ekliyoruz. Ve sorun ortadan kalkıyor.

Kod: Tümünü seç

Procedure TForm2.OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
Begin
text:=Utf8ToString(sender.asString);
End;
Benim veri tabanımda bütün karakterler büyük harf olduğu için hiçbir sorun yaşamadım. Fakat verilen linkten anladığım kadarı ile bazı küçük harflerde sorun çıkabilir. Onunda çözümü verilen linkte vardır.
İlgilenen tüm arkadaşlarıma teşekkür ederim.

Üye
Mesajlar: 26
Kayıt: 23 Kas 2005 01:45

Re: ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen » 21 Oca 2013 07:21

Yaptığım denemelerde yukarıdaki çözümün sorunun %95 ini hallettiğini gördüm.Örneğin alanlardaki karakter sayısı 16 yı geçtiğinde sorun oldu yada bazı karakterlerde anlamadığım problemler oluştu. Aynı linkte aşağılarda verilen bir başka çözüm yolu ise bu problemleride çözdü.

"C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\source\internet\Xmlxform.pas" buradan "Xmlxform.pas" dosyasını kopyalayıp proje klasörümüze yapıştırıyoruz. Burada "Xmlxform.pas" dosyasını not defterinde açıp aşağıdaki satırı buluyoruz.

"Result := Datasnap.DSIntf.StringToVariantArray(Utf8String(S));"
Yukarıdaki satırı aşağıdaki şekilde değiştiriyoruz.
"Result := Datasnap.DSIntf.StringToVariantArray(AnsiString(S));"

Kayıt edip kapatıyoruz. Türkçe karakter problemi ortadan kalkıyor.

<?xml version="1.0" encoding="iso-8859-9"?>
<?xml version="1.0" encoding="UTF-8"?>
xml dosyamızın ilk satırı yukarıdaki her iki şekidede olsa türkçe karakter problemi yaşamadım.

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

Re: ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen noname2040 » 25 Ara 2013 12:25

İyi günler
Çok güzel bir çalışma basit bir xml dosyasından veri okumam gerekiyordu yazdıklarınız sayesinde yaptım teşekkürler
Şimdi başka bir sorunum var
E fatura xml dosyasından veri okuyup başka bir xml (farklı bir formatta) dosyasına yazmak istiyorum
xmp mapper ile efatura xml yi açıp select all children veya all dediğimde
ve sonrasında xmldatapacket oluştur dediğimde Bu adda ":" karakteri kullanılamaz diye uyarı alıyorum
yardım lütfen

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

Re: ClientDataSet ve XMLTransformProvider İle XML Okumak

Mesaj gönderen osiso » 08 Ağu 2018 10:55

ben delphi 10.2 kullanıyorum aö nün paylaşımında bahsettiği olayı çözdüm fakat kelime kırpıyor onu yapamadım xmlxform.pas dosyasını bulamadım sürümden kaynaklı mı acaba yardımcı olabilirmisiniz.
Vurulup Tertemiz Alnından uzanmış Yatıyor
Bir Hilal Uğruna Ya Rab, Ne Güneşler Batıyor!

Cevapla