Chilkat
HOME
Android™
ASP
Visual Basic
VB.NET
C#
iOS (IPhone)
Objective-C
C++
C
MFC
Delphi
FoxPro
Java
Perl
PHP Extension
PHP ActiveX
Python
PowerShell
Ruby
SQL Server
VBScript
Parse SOAP XMLDemonstrates how to parse SOAP XML.
bool success; Chilkat.Xml xml = new 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) { MessageBox.Show(xml.LastErrorText); return; } // 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: Chilkat.Xml xmlFields = null; xmlFields = xml.GetChildWithTag("Fields"); // Iterate over each field: int i; Chilkat.Xml xmlField = null; int numChildren; numChildren = xmlFields.NumChildren; for (i = 0; i <= numChildren - 1; i++) { xmlField = xmlFields.GetChild(i); if (xmlField.HasChildWithTagAndContent("Code","Message") == true) { textBox1.Text += "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 == false) { MessageBox.Show(xml.LastErrorText); return; } xml.FirstChild2(); xml.FirstChild2(); xml.FirstChild2(); // Find the "Fields" node: xmlFields = xml.GetChildWithTag("Fields"); // Get each value: textBox1.Text += "-----" + "\r\n"; textBox1.Text += "Message: " + xmlFields.GetChildContent("Message") + "\r\n"; textBox1.Text += "AuthCodeResp:" + xmlFields.GetChildContent("AuthCodeResp") + "\r\n"; textBox1.Text += "Balance: " + xmlFields.GetChildContent("Balance") + "\r\n"; |
© 2000-2012 Chilkat Software, Inc. All Rights Reserved.