Chilkat HOME ASP Visual Basic VB.NET C# Visual C++ C MFC Delphi FoxPro Java Perl PHP Python 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 |
Need a specific example? Send a request to support@chilkatsoft.com
© 2000-2010 Chilkat Software, Inc. All Rights Reserved.