Perl Examples

ChilkatHOMEAndroid™ASPVisual BasicVB.NETC#iOS (IPhone)Objective-CC++CMFCDelphiFoxProJavaPerl
PHP ExtensionPHP ActiveXPythonPowerShellRubySQL ServerVBScript

Perl Examples

Quick Start
Unicode
Byte Array
Bz2
Certificates
CSV
Email
Encryption
FTP
HTML Conversion
HTTP
IMAP
MHT
MIME
POP3
RSA
S/MIME
Signatures
SMTP
Socket / SSL
Spider
SFTP
SSH Key
SSH
SSH Tunnel
Tar
HTTP Upload
XML
XMP
Zip

More Examples...
String
Amazon S3
Email Object
DKIM / DomainKey
NTLM
FileAccess
RSS
Atom
Self-Extractor
Service
PPMD
Deflate
DH Key Exchange
DSA
Bzip2
LZW

 

 

 

 

 

 

 

Parse SOAP XML

Demonstrates how to parse SOAP XML.

 Chilkat Perl Module Downloads for Windows, Linux, and MAC OS X

use chilkat();


$xml = new chilkat::CkXml();

#  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 == 0) {
    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 CkXml
$xmlFields = $xml->GetChildWithTag("Fields");

#  Iterate over each field:

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

    # xmlField is a CkXml
    $xmlField = $xmlFields->GetChild($i);

    if ($xmlField->HasChildWithTagAndContent("Code","Message") == 1) {
        print "Message: " . $xmlField->getChildContent("Value") . "\r\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 == 0) {
    print $xml->lastErrorText() . "\n";
    exit;
}

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

#  Find the "Fields" node:
# xmlFields is a CkXml
$xmlFields = $xml->GetChildWithTag("Fields");

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


 

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