XML Pars işleminde yardım

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

XML Pars işleminde yardım

Mesaj gönderen adelphiforumz »

S.A.

Elimdeki XML'i pars ederken sonsuz döngüde kalıyorum ve birtürlü işlemi istediğim gibi tamamlıyamadım
acaba kodda nerde bir hata var yardımcı olabilirmisiniz

Teşekkürler

Kod: Tümünü seç

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 640
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 321
    Top = 8
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Memo1: TMemo
    Left = 8
    Top = 8
    Width = 313
    Height = 601
    Lines.Strings = (
      '<?xml version="1.0" encoding="utf-8" ?>'
      '<!-- Versiyon 1.0 -->'
      '<Kayitlar>'
      '<Firma>DENE FIRMASI</Firma>'
      '<versiyon>1.0</versiyon>'
      '<FirmaKod>12001010031</FirmaKod>'
      '<Evrak>'
      '<serino>8680001086443</serino>'
      '<tarih>09/10/2015</tarih>'
      '<Sirano>18959103</Sirano>'
      '<OdemeDetay>'
      '<odemetarihi>06/01/2016</odemetarihi>'
      '<OdemeToplam>126.36</OdemeToplam>'
      '<OzelIskonto>0</OzelIskonto>'
      '<geneliskonto>0</geneliskonto>'
      '<taksTagayisi>1</taksTagayisi>'
      '<taksitaralik>0</taksitaralik>'
      '<odemeplani>'
      '<vade>'
      '<vadetarihi>06/01/2016</vadetarihi>'
      '<vadetutari>126.36</vadetutari>'
      '</vade>'
      '</odemeplani>'
      '<Urunler>'
      '<UrunAdi>URUN TEST 1</UrunAdi>'
      '<EtiketNo>8699976090140</EtiketNo>'
      '<Fiyat1>25.44</Fiyat1>'
      '<Fiyat2>34.35</Fiyat2>'
      '<Fiyat3>34.35</Fiyat3>'
      '<miktar>3</miktar>'
      '<EkMiktar>0</EkMiktar>'
      '<iskontoorani1>36.5000</iskontoorani1>'
      '<iskontoorani2>0.0000</iskontoorani2>'
      '<Indorani>20.00</Indorani>'
      '<kdv>8</kdv>'
      '<EvrakTipi>0</EvrakTipi>'
      '<Urunlertipi>0</Urunlertipi>'
      '<SonTarih>01/02/2017</SonTarih>'
      '<IslemKod>H</IslemKod>'
      '<Tag>'
      '<Tag1>08699976090140</Tag1>'
      '<Tag1x>02934</Tag1x>'
      '<Tag1y>00000000000000515418</Tag1y>'
      '<Tag1z>170731</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699976090140</Tag1>'
      '<Tag1x>02934</Tag1x>'
      '<Tag1y>00000000000000515434</Tag1y>'
      '<Tag1z>170731</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699976090140</Tag1>'
      '<Tag1x>02934</Tag1x>'
      '<Tag1y>00000000000000515426</Tag1y>'
      '<Tag1z>170731</Tag1z>'
      '</Tag>'
      '</Urunler>'
      '<Urunler>'
      '<UrunAdi>URUN TEST 2</UrunAdi>'
      '<EtiketNo>8697529350079</EtiketNo>'
      '<Fiyat1>5.70</Fiyat1>'
      '<Fiyat2>7.69</Fiyat2>'
      '<Fiyat3>7.69</Fiyat3>'
      '<miktar>2</miktar>'
      '<EkMiktar>0</EkMiktar>'
      '<iskontoorani1>7.0000</iskontoorani1>'
      '<iskontoorani2>0.0000</iskontoorani2>'
      '<Indorani>20.00</Indorani>'
      '<kdv>8</kdv>'
      '<EvrakTipi>0</EvrakTipi>'
      '<Urunlertipi>0</Urunlertipi>'
      '<SonTarih>01/05/2020</SonTarih>'
      '<IslemKod>H</IslemKod>'
      '<Tag>'
      '<Tag1>08699546350087</Tag1>'
      '<Tag1x>TRT0DVV</Tag1x>'
      '<Tag1y>577522830526</Tag1y>'
      '<Tag1z>200504</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699546350087</Tag1>'
      '<Tag1x>TRT0DVV</Tag1x>'
      '<Tag1y>578097297814</Tag1y>'
      '<Tag1z>200504</Tag1z>'
      '</Tag>'
      '</Urunler>'
      '<Urunler>'
      '<UrunAdi>URUN TEST 3(BETAS</UrunAdi>'
      '<EtiketNo>8699738380700</EtiketNo>'
      '<Fiyat1>4.80</Fiyat1>'
      '<Fiyat2>6.48</Fiyat2>'
      '<Fiyat3>6.48</Fiyat3>'
      '<miktar>2</miktar>'
      '<EkMiktar>0</EkMiktar>'
      '<iskontoorani1>7.0000</iskontoorani1>'
      '<iskontoorani2>0.0000</iskontoorani2>'
      '<Indorani>20.00</Indorani>'
      '<kdv>8</kdv>'
      '<EvrakTipi>0</EvrakTipi>'
      '<Urunlertipi>0</Urunlertipi>'
      '<SonTarih>01/12/2018</SonTarih>'
      '<IslemKod>H</IslemKod>'
      '<Tag>'
      '<Tag1>08699738380700</Tag1>'
      '<Tag1x>22055124</Tag1x>'
      '<Tag1y>15000133102713</Tag1y>'
      '<Tag1z>181231</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699738380700</Tag1>'
      '<Tag1x>22055124</Tag1x>'
      '<Tag1y>15000133106277</Tag1y>'
      '<Tag1z>181231</Tag1z>'
      '</Tag>'
      '</Urunler>'
      '<Urunler>'
      '<UrunAdi>URUN TEST 4</UrunAdi>'
      '<EtiketNo>8699522521456</EtiketNo>'
      '<Fiyat1>5.27</Fiyat1>'
      '<Fiyat2>7.12</Fiyat2>'
      '<Fiyat3>7.12</Fiyat3>'
      '<miktar>10</miktar>'
      '<EkMiktar>0</EkMiktar>'
      '<iskontoorani1>7.0000</iskontoorani1>'
      '<iskontoorani2>0.0000</iskontoorani2>'
      '<Indorani>20.00</Indorani>'
      '<kdv>8</kdv>'
      '<EvrakTipi>0</EvrakTipi>'
      '<Urunlertipi>0</Urunlertipi>'
      '<SonTarih>01/06/2017</SonTarih>'
      '<IslemKod>H</IslemKod>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490395869</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490395888</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490395907</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490395926</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490395945</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490395964</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490395983</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490396002</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490396021</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '<Tag>'
      '<Tag1>08699522521456</Tag1>'
      '<Tag1x>GM3E</Tag1x>'
      '<Tag1y>70388490396040</Tag1y>'
      '<Tag1z>170630</Tag1z>'
      '</Tag>'
      '</Urunler>'
      '</OdemeDetay>'
      '</Evrak>'
      '</Kayitlar>'
      '')
    TabOrder = 1
  end
  object Memo2: TMemo
    Left = 402
    Top = 8
    Width = 225
    Height = 601
    Lines.Strings = (
      'Memo2')
    TabOrder = 2
  end
end

Kod: Tümünü seç

unit XmlPArs;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
   InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns, NativeXml,
     SOAPHTTPTrans, Wininet, xmldom, ActiveX, IdHTTP,  IdComponent,
     MSXML, XMLIntf;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure prc_NodeToNameAndText(pNode:IXMLDomNode);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.prc_NodeToNameAndText(pNode:IXMLDomNode);
var
  X : Integer;
  Node : IXMLDomNode;
begin
    Node := pNode;
    while Node <> nil do
    begin
        if Node.childNodes.length > 1 then
          for X := 0 to Node.childNodes.length - 1 do
              prc_NodeToNameAndText(Node.childNodes.item[X]);

        if not( (Node.nodeName = '') and (Node.nodeName = 'Null') ) then
           Memo2.Lines.Add(Node.nodeName + '=(' + Trim(Node.text) +')')
        else
           Memo2.Lines.Add(' ');

        Node := Node.nextSibling;
    end;
    Memo2.Lines.Add(' ');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FileStream: TextFile;
  XMLDoc: IXMLDomDocument;
  NodeMain : IXMLDomNode;
  XMLText : IXMLDOMText;
  I:Integer;
begin
    XMLDoc := CoDOMDocument.Create;
    XMLDoc.loadXML(Memo1.Text);
    if XMLDoc.documentElement = nil then Exit; // Add proper Error handling.

    try
      NodeMain := XMLDoc.documentElement.firstChild;
      prc_NodeToNameAndText(NodeMain);
    finally
    end;
end;

end.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: XML Pars işleminde yardım

Mesaj gönderen varyemez »

Bu XML bir webservisten gelen cevap değil mi.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: XML Pars işleminde yardım

Mesaj gönderen adelphiforumz »

bir xml dosyası içerisinden alınan String türünde bir veri
ben string olan xml verisini bir şekide name ve valu değerlerine ayırmaya çalışıyorum
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: XML Pars işleminde yardım

Mesaj gönderen mrmarman »

Senin için XMLDocument üzerinden şöyle bir örnek hazırladım.

Kod: Tümünü seç

procedure XML_Parse( strXMLText: String; Memo: TMemo);
  procedure ChildNodeIslem( Node : IXMLNode; Memo: TMemo );
  var
    cNode : IXMLNode;
  begin
    if Node = nil then Exit;

    if Node.IsTextElement then
    begin
      Memo.Lines.Add( Format('%13-s : %s', [Node.NodeName, Node.NodeValue] ) );
      if ( Node.NodeName = 'UrunAdi' ) OR ( Node.NodeName = 'Firma' ) then
      begin
        Memo.Lines.Insert( Memo.Lines.Count-1, '' );
        Memo.Lines.Add( StringOfChar( '-', Length( Memo.Lines[ Memo.Lines.Count-1 ]) ) );
      end;
    end else
    begin
      if Node.HasChildNodes then
      begin
        Memo.Lines.Add( Format('%13-s : %s', [Node.NodeName, ''] ) );
          Memo.Lines.Insert( Memo.Lines.Count-1, '' );
          Memo.Lines.Add( StringOfChar( '.', Length( Memo.Lines[ Memo.Lines.Count-1 ]) ) );
      end;
    end;

    cNode := Node.ChildNodes.First;
    while cNode <> nil do
    begin
      ChildNodeIslem(cNode, Memo);
      cNode := cNode.NextSibling;
    end;
  end;
var
  XMLDoc : IXMLDocument;
  iNode  : IXMLNode;
begin
  XMLDoc          := TXMLDocument.Create( nil );
  XMLDoc.XML.Text := strXMLText;
  XMLDoc.Active   := True;
    Memo.Lines.Clear;
    iNode := XMLDoc.DocumentElement;
    while iNode <> nil do
    begin
      ChildNodeIslem(iNode, Memo);
      iNode := iNode.NextSibling;
    end;
  XMLDoc.Active   := False;
end;
Kullanımı:

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  XML_Parse( Memo1.Lines.Text, Memo2 );
end;
Çıktısı da şöyle oldu... (anlaşılırlık için süsleme koddaki Format fonksiyonlarından :) )

Kod: Tümünü seç

Kayitlar      : 
................

Firma         : DENE FIRMASI
----------------------------
versiyon      : 1.0
FirmaKod      : 12001010031

Evrak         : 
................
serino        : 8680001086443
tarih         : 09/10/2015
Sirano        : 18959103

OdemeDetay    : 
................
odemetarihi   : 06/01/2016
OdemeToplam   : 126.36
OzelIskonto   : 0
geneliskonto  : 0
taksTagayisi  : 1
taksitaralik  : 0

odemeplani    : 
................

vade          : 
................
vadetarihi    : 06/01/2016
vadetutari    : 126.36

Urunler       : 
................

UrunAdi       : URUN TEST 1
---------------------------
EtiketNo      : 8699976090140
Fiyat1        : 25.44
Fiyat2        : 34.35
Fiyat3        : 34.35
miktar        : 3
EkMiktar      : 0
iskontoorani1 : 36.5000
iskontoorani2 : 0.0000
Indorani      : 20.00
kdv           : 8
EvrakTipi     : 0
Urunlertipi   : 0
SonTarih      : 01/02/2017
IslemKod      : H

Tag           : 
................
Tag1          : 08699976090140
Tag1x         : 02934
Tag1y         : 00000000000000515418
Tag1z         : 170731

Tag           : 
................
Tag1          : 08699976090140
Tag1x         : 02934
Tag1y         : 00000000000000515434
Tag1z         : 170731

Tag           : 
................
Tag1          : 08699976090140
Tag1x         : 02934
Tag1y         : 00000000000000515426
Tag1z         : 170731

Urunler       : 
................

UrunAdi       : URUN TEST 2
---------------------------
EtiketNo      : 8697529350079
Fiyat1        : 5.70
Fiyat2        : 7.69
Fiyat3        : 7.69
miktar        : 2
EkMiktar      : 0
iskontoorani1 : 7.0000
iskontoorani2 : 0.0000
Indorani      : 20.00
kdv           : 8
EvrakTipi     : 0
Urunlertipi   : 0
SonTarih      : 01/05/2020
IslemKod      : H

Tag           : 
................
Tag1          : 08699546350087
Tag1x         : TRT0DVV
Tag1y         : 577522830526
Tag1z         : 200504

Tag           : 
................
Tag1          : 08699546350087
Tag1x         : TRT0DVV
Tag1y         : 578097297814
Tag1z         : 200504

Urunler       : 
................

UrunAdi       : URUN TEST 3(BETAS
---------------------------------
EtiketNo      : 8699738380700
Fiyat1        : 4.80
Fiyat2        : 6.48
Fiyat3        : 6.48
miktar        : 2
EkMiktar      : 0
iskontoorani1 : 7.0000
iskontoorani2 : 0.0000
Indorani      : 20.00
kdv           : 8
EvrakTipi     : 0
Urunlertipi   : 0
SonTarih      : 01/12/2018
IslemKod      : H

Tag           : 
................
Tag1          : 08699738380700
Tag1x         : 22055124
Tag1y         : 15000133102713
Tag1z         : 181231

Tag           : 
................
Tag1          : 08699738380700
Tag1x         : 22055124
Tag1y         : 15000133106277
Tag1z         : 181231

Urunler       : 
................

UrunAdi       : URUN TEST 4
---------------------------
EtiketNo      : 8699522521456
Fiyat1        : 5.27
Fiyat2        : 7.12
Fiyat3        : 7.12
miktar        : 10
EkMiktar      : 0
iskontoorani1 : 7.0000
iskontoorani2 : 0.0000
Indorani      : 20.00
kdv           : 8
EvrakTipi     : 0
Urunlertipi   : 0
SonTarih      : 01/06/2017
IslemKod      : H

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490395869
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490395888
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490395907
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490395926
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490395945
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490395964
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490395983
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490396002
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490396021
Tag1z         : 170630

Tag           : 
................
Tag1          : 08699522521456
Tag1x         : GM3E
Tag1y         : 70388490396040
Tag1z         : 170630
Resim
Resim ....Resim
Cevapla