Chilkat HOME ASP Visual Basic VB.NET C# C C++ MFC Delphi FoxPro Java Perl Python Ruby SQL Server VBScript
Parse SOAP XMLDemonstrates how to parse SOAP XML. <?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.