04-12-2018, Saat: 10:05
E fatura okuma hakkında sürekli istek geldiği için detaylı bir okuma örneğini burada paylaşalım ki arayan bulabilsin dedim. Aşağıda tüm Node ları okuyan bir xml okuma örneği var, bu olayı programlarına entegre etmek isteyen arkadaşlar geliştirebilirler.
Önce Uses kısmı
Form'a bir button birde memo koyup aşağıdaki şekilde kodlayabilirsiniz.
Önce Uses kısmı
Xml.xmldom, Xml.XMLIntf, Xml.XMLDoc
Form'a bir button birde memo koyup aşağıdaki şekilde kodlayabilirsiniz.
public
{ Public declarations }
procedure NOdeOku(A:IXMLNode);
end;
var
Form1: TForm1;
Girinti : Integer;
implementation
{$R *.dfm}
Function BoslukAt(Deger:Integer):String;
var
x:Integer;
Begin
Result := '';
for x:=1 to Deger Do Result := Result + ' ';
End;
procedure TForm1.NOdeOku(A:IXMLNode);
VAR
ANode : IXMLNode;
Begin
Girinti := Girinti + 3;
ANode:=A.ChildNodes.First;
repeat
if Assigned(ANode) then begin
if (ANode.IsTextElement=true)
Then Begin
Memo1.Lines.Add(BoslukAt(Girinti)+': '+ANode.LocalName+' -> '+ANode.Text);
End Else Begin
Memo1.Lines.Add(BoslukAt(Girinti)+'- '+ ANode.LocalName);
NOdeOku(ANODE);
End;
ANode := ANode.NextSibling;//bir sonraki node ye atla...
end;
until ANode=Nil;
End;
procedure TForm1.Button1Click(Sender: TObject);
var
D : IXMLDocument;
ANode: IXMLNode;
begin
memo1.Lines.Clear;
D:= LoadXMLDocument('OkunacakXmlDosyasi.xml');
D.Active := True ;
ANode:=D.DocumentElement.ChildNodes.First; // ilk node invoice tir
repeat
if Assigned(ANode)
Then begin
if (ANode.IsTextElement=True)
Then Begin
Memo1.Lines.Add(BoslukAt(Girinti)+': '+ANode.LocalName+' -> '+ANode.Text);
End Else Begin
if (ANode.NodeName<>'ext:UBLExtensions') and
(ANode.NodeName<>'cac:AdditionalDocumentReference') and
(ANode.NodeName<>'cac:Signature')
Then Begin
Memo1.Lines.Add('*'+ ANode.NodeName); // Ana Node (Ana Baslik)
Girinti := 0;
NOdeOku(ANODE);
End;
End;
ANode := ANode.NextSibling;//bir sonraki node ye atla...
End;
until ANode=Nil;
end;

