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

Handling Namespaces in XML Tags

See more XML Examples

Demonstrates new features added in Chilkat v9.5.0.77 for helping with namespace prefixed tags.

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
  xml: TXml;
  xmlBody: TXml;
  isBodyTag: Boolean;
  isSoapenv: Boolean;

begin
  //  First create some XML using namespace prefixed tags.

  //  Create this XML. 
  //  Use this online tool to generate the code from sample XML: 
  //  Generate Code to Create XML

  //  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  //     xmlns:scm="http://www.springcm.com/atlas/webservices/v201308/scm/">
  //     <soapenv:Header/>
  //     <soapenv:Body>
  //        <scm:AccountGetCurrent>
  //           <scm:token>123</scm:token>
  //        </scm:AccountGetCurrent>
  //     </soapenv:Body>
  //  </soapenv:Envelope>

  xml := TXml.Create;
  xml.Tag := 'soapenv:Envelope';
  xml.AddAttribute('xmlns:soapenv','http://schemas.xmlsoap.org/soap/envelope/');
  xml.AddAttribute('xmlns:scm','http://www.springcm.com/atlas/webservices/v201308/scm/');
  xml.UpdateChildContent('soapenv:Header','');
  xml.UpdateChildContent('soapenv:Body|scm:AccountGetCurrent|scm:token','123');

  //  Go to the "Body" tag, regardless of namespace prefix.
  xmlBody := xml.FindChild('*:Body');
  if (xml.LastMethodSuccess <> True) then
    begin
      WriteLn('Body child not found.');
      Exit;
    end;

  //  Get the full tag w/ namespace prefix:
  //  Output is "soapenv:Body"
  WriteLn(xmlBody.Tag);

  //  Get the namespace prefix:
  //  Output is "soapenv"
  WriteLn(xmlBody.TagNsPrefix);

  //  Get the unprefixed tag:
  //  Output is "Body"
  WriteLn(xmlBody.TagUnprefixed);

  //  Check to see if the unprefixed tag equals "Body"
  isBodyTag := xmlBody.TagUnpEquals('Body');
  WriteLn('isBodyTag = ' + isBodyTag);

  //  Check to see if the namespace prefix equals "soapenv";
  isSoapenv := xmlBody.TagNsEquals('soapenv');
  WriteLn('isSoapenv = ' + isSoapenv);

  //  Change just the namespace prefix of the tag
  xmlBody.TagNsPrefix := 'se';
  //  The tag has changed from "soapenv:Body" to "se:Body"
  WriteLn(xmlBody.Tag);

  //  Change the unprefixed part of the tag.
  xmlBody.TagUnprefixed := 'Bodie';
  //  The tag has changed from "se:Body" to "se:Bodie"
  WriteLn(xmlBody.Tag);

  xmlBody.Free;


  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.