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

Access SOAP Body XML

Demonstrates how to access the SOAP body in XML.
<?xml version="1.0" encoding="utf-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cfdi="http://www.sat.gob.mx/cfd/3">
    <soapenv:Body>
        <tfd:TimbreFiscalDigital version="1.0" />
    </soapenv:Body>
</soapenv:Envelope>

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;
  xSoapEnvelope: TXml;
  xSoapBody: TXml;
  xMessageBody: TXml;
  soapMessageXml: string;

begin
  success := False;

  xSoapEnvelope := TXml.Create;

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

  //  The root node is the SOAP envelope, and in this particular case has a Tag of "soapenv:Envelope"
  WriteLn('SOAP envelope tag: ' + xSoapEnvelope.Tag);

  //  The SOAP body (in this case) is a direct child of the SOAP envelope
  //  and has the tag "soapenv:Body"
  xSoapBody := xSoapEnvelope.FindChild('soapenv:Body');
  if (xSoapEnvelope.LastMethodSuccess = False) then
    begin
      WriteLn('No direct child having the tag "soapenv:Body" was found.');
      Exit;
    end;

  //  The SOAP message body is the direct child of the SOAP envelope body:
  xMessageBody := xSoapBody.FindChild('TimbreFiscalDigital');
  if (xSoapBody.LastMethodSuccess = False) then
    begin
      WriteLn('No direct child having the tag "TimbreFiscalDigital" was found.');
      xSoapBody.Free;
      Exit;
    end;

  //  If desired, get the XML of just the SOAP message body:
  soapMessageXml := xSoapBody.GetXml();

  xMessageBody.Free;
  xSoapBody.Free;

  //  --------------------------------------------------------------------------------
  //  Also see Chilkat's Online WSDL Code Generator
  //  to generate code and SOAP Request and Response XML for each operation in a WSDL.
  //  --------------------------------------------------------------------------------


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