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. Dim success As Long Dim xml As New ChilkatXml ' 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) Then MsgBox xml.LastErrorText Exit Sub End If ' 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: Dim xmlFields As ChilkatXml Set xmlFields = xml.GetChildWithTag("Fields") ' Iterate over each field: Dim i As Long Dim xmlField As ChilkatXml Dim numChildren As Long numChildren = xmlFields.NumChildren For i = 0 To numChildren - 1 Set xmlField = xmlFields.GetChild(i) If (xmlField.HasChildWithTagAndContent("Code","Message") = 1) Then Text1.Text = Text1.Text & "Message: " _ & xmlField.GetChildContent("Value") & vbCrLf End If ' Use the same logic for the other fields you want to capture... Next ' 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) Then MsgBox xml.LastErrorText Exit Sub End If xml.FirstChild2 xml.FirstChild2 xml.FirstChild2 ' Find the "Fields" node: Set xmlFields = xml.GetChildWithTag("Fields") ' Get each value: Text1.Text = Text1.Text & "-----" & vbCrLf Text1.Text = Text1.Text & "Message: " & xmlFields.GetChildContent("Message") & vbCrLf Text1.Text = Text1.Text & "AuthCodeResp:" & xmlFields.GetChildContent("AuthCodeResp") & vbCrLf Text1.Text = Text1.Text & "Balance: " & xmlFields.GetChildContent("Balance") & vbCrLf |
© 2000-2012 Chilkat Software, Inc. All Rights Reserved.