Programming Examples

ChilkatHOMEASPVisual BasicVB.NETC#CC++MFCDelphiFoxProJavaPerlPythonRubySQL ServerVBScript

PHP ActiveX Examples

Bounced Mail
Bz2
Certificates/Keys
Charset
CSV
DKIM / DomainKey
Diffie-Hellman
DSA
Email Object
Encryption
FileAccess
FTP
HTML Conversion
HTTP
IMAP
MHT / HTML Email
MIME
NTLM
POP3
RSA
SMTP
Socket
Spider
SSH Key
SSH
SSH Tunnel
SFTP
Tar
Upload
XML
Zip
Amazon S3


 

 

 

 

 

 

 

 

Parse SOAP XML

Demonstrates how to parse SOAP XML.

Download Chilkat XML ActiveX

<?php


$xml = new COM("Chilkat.Xml");

//  The Chilkat XML component is freeware.

//  Load an XML document.
//  This document may be downloaded at:
//  http://www.chilkatsoft.com/testData/soap1.xml
$success = $xml->LoadXmlFile('soap1.xml');
if ($success == false) {
    print $xml->lastErrorText() . "\n";
    exit;
}

//  The sample XML document parsed here is a prime example
//  of how NOT to design your XML schema.  When designing
//  XML, always keep in mind how a program might parse it.
//  Poorly designed XML is a big pain-in-the-ass to parse.
//  We'll show you a much better schema at the end of this
//  example.

//  Here's the XML we'll want to parse:

//  <?xml version="1.0" encoding="utf-8"?><soap:Envelope
//  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
//  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
//  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
//  <soap:Body>
//  <SendRequestResponse
//  xmlns="http://merchantwarehouse.com/webservices/public/MerchantWareService1">
//  <SendRequestResult>
//  <Code>Approved</Code>
//  <ProcessorData>[Response_Code][00][Response_Text][106857][Auth_Reference
//  ][0016][Amount_Balance][205.78][Expiration_Date][012014][Trans_Date_Time
//  ][012209000734][Card_Number][710001900593731][Transaction_ID][1]</ProcessorData>
//  <Fields><Field>
//  <Code>Unknown</Code><Value>1</Value>
//  </Field>
//  <Field>
//  <Code>Message</Code><Value>106857</Value>
//  </Field>
//  <Field>
//  <Code>AuthCodeResp</Code><Value>0016</Value>
//  </Field>
//  <Field>
//  <Code>Balance</Code><Value>205.78</Value>
//  </Field>
//  </Fields>
//  </SendRequestResult>
//  </SendRequestResponse>
//  </soap:Body>
//  </soap:Envelope>

//  The poor design choice in the above XML is to use the same tag over and over.
//  For example "Field", "Code", and "Value".
//  Here's a much much better design, and you'll see later how the parsing is so much simpler:
// 
//  ...
//  <Fields>
//  <Message>106857</Message>
//  <AuthCodeResp>0016</AuthCodeResp>
//  <Balance>205.78</Balance>
//  </Fields>
//  ...

//  Notice it's much more compact.
//  The other poor design choice is globbing all of that information in "ProcessorData".
//  You can't use XML alone to parse the contents of that node -- you'll have to write
//  some custom string parsing code for it...  (ughhh)
// 

//  OK... so let's parse this beast...
//  We already have it loaded in an instance of the XML object.
//  Drill down to the SendRequestResult node:
$xml->FirstChild2();
$xml->FirstChild2();
$xml->FirstChild2();

//  Find the "Fields" node:

// xmlFields is a Chilkat.Xml
$xmlFields = $xml->GetChildWithTag('Fields');

//  Iterate over each field:

$numChildren = $xmlFields->NumChildren;
for ($i = 0; $i <= $numChildren - 1; $i++) {

    // xmlField is a Chilkat.Xml
    $xmlField = $xmlFields->GetChild($i);

    if ($xmlField->HasChildWithTagAndContent('Code','Message') == true) {
        print 'Message: ' . $xmlField->getChildContent('Value') . "\n";
    }

    //  Use the same logic for the other fields you want to capture...

}

//  Here's the XML parsing code if the XML were designed like this:
//  ...
//  <Fields>
//  <Unknown>1</Unknown>
//  <Message>106857</Message>
//  <AuthCodeResp>0016</AuthCodeResp>
//  <Balance>205.78</Balance>
//  </Fields>
//  ...
$success = $xml->LoadXmlFile('soap2.xml');
if ($success == false) {
    print $xml->lastErrorText() . "\n";
    exit;
}

$xml->FirstChild2();
$xml->FirstChild2();
$xml->FirstChild2();

//  Find the "Fields" node:
// xmlFields is a Chilkat.Xml
$xmlFields = $xml->GetChildWithTag('Fields');

//  Get each value:
print '-----' . "\n";
print 'Message: ' . $xmlFields->getChildContent('Message') . "\n";
print 'AuthCodeResp:' . $xmlFields->getChildContent('AuthCodeResp') . "\n";
print 'Balance: ' . $xmlFields->getChildContent('Balance') . "\n";


?>

Need a specific example? Send a request to support@chilkatsoft.com

© 2000-2010 Chilkat Software, Inc. All Rights Reserved.