Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Demonstrate XML SearchForTag2
Demonstrates how to use SearchForTag2.Chilkat Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.StringBuilder,
Chilkat.Xml;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
xml: TXml;
i: Integer;
xmlSearch: TXml;
afterPtr: TXml;
pTemp: TXml;
sbState: TStringBuilder;
begin
success := False;
xml := TXml.Create;
// Load the following XML:
// <Test>
// <testchild1>
// test
// </testchild1>
// <testchild1>
// test1
// </testchild1>
// <testchild1>
// test2
// </testchild1>
// <testchild1>
// test3
// </testchild1>
// <testchild1>
// test4
// </testchild1>
// <testchild1>
// test5
// </testchild1>
// <testchild1>
// test6
// </testchild1>
// </Test>
success := xml.LoadXml('<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>');
i := 0;
xmlSearch := xml.GetRoot();
afterPtr := xml.GetRoot();
// Alway begin the search from the root.
while xmlSearch.SearchForTag2(afterPtr,'testchild1') do
begin
// If successful, xmlSearch now points to the found element.
i := i + 1;
// Set afterPtr = xmlSearch (so we find the next match after the one we just found)
// Rest xmlSearch to the root of the XML tree to be searched.
WriteLn(i + ': ' + xmlSearch.Content);
pTemp := afterPtr;
afterPtr := xmlSearch;
pTemp.GetRoot2();
xmlSearch := pTemp;
end;
xmlSearch.Free;
afterPtr.Free;
WriteLn('----');
// A better way:
sbState := TStringBuilder.Create;
i := 0;
while xml.NextInTraversal2(sbState) <> False do
begin
if (xml.TagEquals('testchild1') = True) then
begin
WriteLn(i + ': ' + xml.Content);
i := i + 1;
end;
end;
xml.GetRoot2();
xml.Free;
sbState.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.