Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Demonstrates the ChilkatPath XML Method

Demonstrates how to use the ChilkatPath method. This example uses the XML sample file pigs.xml. The pigs.xml file contains this content:

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
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.Xml;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  xml: TXml;
  result: string;

begin
  success := False;

  xml := TXml.Create;

  success := xml.LoadXmlFile('qa_data/xml/pigs.xml');
  if (success <> True) then
    begin
      WriteLn(xml.LastErrorText);
      Exit;
    end;

  //  Get the content of the "species" node for the 1st animal:

  result := xml.ChilkatPath('animal|species|*');
  //  Output should be "pot belly pig"
  WriteLn(result);

  //  Get the content of the "type" node for the 2nd animal:
  //  Indexing begins at 0.  Therefore, the 2nd direct child having
  //  the tag "animal" is at index 1
  result := xml.ChilkatPath('animal[1]|type|*');
  //  Output should be "House Pig"
  WriteLn(result);

  //  Find the pig having the name "Nigel" and display the
  //  birth date.  To do this, we&apos;ll navigate to the node having
  //  tag="name" with the exact content "Nigel", then navigate up, 
  //  and finally navigate back down to the "birth" node:
  result := xml.ChilkatPath('/C/name,Nigel|..|birth|*');
  //  Output should be "June, 1991"
  WriteLn(result);

  //  Navigate to the 1st animal&apos;s picture and print the filename,
  //  description, and caption.
  //  The "$" updates the caller&apos;s internal pointer to reference
  //  the node that is the result of evaluating the path.
  //  An empty string is returned for success, and a NULL/nil/0
  //  pointer (reference) is returned on failure.  
  result := xml.ChilkatPath('animal|picture|$');
  if (xml.LastMethodSuccess <> True) then
    begin
      WriteLn('Failed to navigate to animal|picture.');
      Exit;
    end;

  //  Display the contents of the file/description/caption child nodes
  WriteLn('Picture Info:');
  WriteLn(xml.GetChildContent('file'));
  WriteLn(xml.GetChildContent('description'));
  WriteLn(xml.GetChildContent('caption'));

  //  Return back to the root of the XML document:
  xml.GetRoot2();

  //  Display the value of the "spay-neuter" attribute of the 1st animal:
  WriteLn('----');
  result := xml.ChilkatPath('animal|gender|(spay-neuter)');
  WriteLn(result);


  xml.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.