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

Find XML Element where Attribute = Value

See more XML Examples

Finds an XML element at a particular location where an attribute has a specified value.

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;
  notUsed: string;

begin
  success := False;

  //  We have the following XML and wish to find the value of the time attribute where msg = "alert-from".

  //  <cdr id="4e5d3e7f41bf6201ad81000c29703270" e164="6207">
  //      <user>
  //          <grp name="wfln" mode="active"/>
  //      </user>
  //      <event msg="setup-to" time="287069" e164="5034"/>
  //      <event msg="alert-from" time="287069" e164="5034"/>
  //      <event msg="rel-to" time="287079" e164="5034"/>
  //  </cdr>

  //  First, build the above XML:

  xml := TXml.Create;
  xml.Tag := 'cdr';
  xml.AddAttribute('id','4e5d3e7f41bf6201ad81000c29703270');
  xml.AddAttribute('e164','6207');
  xml.UpdateAttrAt('user|grp',True,'name','wfln');
  xml.UpdateAttrAt('user|grp',True,'mode','active');
  xml.UpdateAttrAt('event',True,'msg','setup-to');
  xml.UpdateAttrAt('event',True,'time','287069');
  xml.UpdateAttrAt('event',True,'e164','5034');
  xml.UpdateAttrAt('event[1]',True,'msg','alert-from');
  xml.UpdateAttrAt('event[1]',True,'time','287069');
  xml.UpdateAttrAt('event[1]',True,'e164','5034');
  xml.UpdateAttrAt('event[2]',True,'msg','rel-to');
  xml.UpdateAttrAt('event[2]',True,'time','287079');
  xml.UpdateAttrAt('event[2]',True,'e164','5034');

  //  Show that we have the above XML
  WriteLn(xml.GetXml());

  //  Find the element where msg = "alert-from"
  //  This updates the xml object's reference to the found element (if successful).
  notUsed := xml.ChilkatPath('/A/event,msg,alert-from|$');
  if (xml.LastMethodSuccess = False) then
    begin
      WriteLn('Not found.');
      Exit;
    end;

  //  Get the value of the "time" attribute.
  WriteLn('time = ' + xml.GetAttrValue('time'));

  //  Restore the xml object's internal reference to the root of the XML document
  xml.GetRoot2();


  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.