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 XML ResponseCode to parse a SOAP XML response. This is the SOAP response parsed by the code below:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CHILKATXMLLib_TLB, OleCtrls; ... procedure TForm1.Button1Click(Sender: TObject); var success: Integer; bFound: Integer; xml: CHILKATXMLLib_TLB.IChilkatXml; strPrice: String; begin xml := TChilkatXml.Create(Self).ControlInterface; // Load the XML object with the SOAP response. // The XML may be loaded from a file by calling // LoadXmlFile, or directly from a string by calling // LoadXml. success := xml.LoadXmlFile('soapResponse.xml'); if (success <> 1) then begin Memo1.Lines.Add(xml.LastErrorText); Exit; end; // The quickest way to get a piece of data is w/ the // ChilkatPath method. // To get the content of the m:Price node: strPrice := xml.ChilkatPath('soap:Body|m:GetStockPriceResponse|m:Price|*'); Memo1.Lines.Add('Price = ' + strPrice); // ------------------------------------ // Another way of doing it: // Another way to get it is to navigate to the node. // Navigate to soap:Body xml.FirstChild2(); // Navigate to m:GetStockPriceResponse // You may call FirstChild2, or you may call GetChildWithTag2 // to get the Nth direct child having a given tag. // In this case, get the 1st direct child having the tag // "m:GetStockPriceResponse" // (Indexing begins at 0, so the 1st occurance is at index 0.) bFound := xml.GetNthChildWithTag2('m:GetStockPriceResponse',0); if (bFound <> 1) then begin Memo1.Lines.Add('Did not find m:GetStockPriceResponse node.'); Exit; end; // One more to go.. bFound := xml.GetNthChildWithTag2('m:Price',0); if (bFound <> 1) then begin Memo1.Lines.Add('Did not find m:Price node.'); Exit; end; // The content of the "m:Price" node is "34.5" strPrice := xml.Content; Memo1.Lines.Add('Price = ' + strPrice); // Restore the xml object's internal reference to the root // of the XML document: xml.GetRoot2(); // ------------------------------------ // Another way of doing it: // If you know that the node w/ the content you want to // extract is uniquely tagged (i.e. no other node has the same // tag), then search for the node having the tag: bFound := xml.SearchForTag2(xml,'m:Price'); if (bFound <> 1) then begin // Not found... Exit; end; // The content of the "m:Price" node is "34.5" strPrice := xml.Content; Memo1.Lines.Add('Price = ' + strPrice); // Restore the xml object's internal reference to the root // of the XML document: xml.GetRoot2(); // ------------------------------------ // Another way of doing it: // Again, assuming there is only a single node with the // tag to be fetched: strPrice := xml.AccumulateTagContent('m:Price',''); Memo1.Lines.Add('Price = ' + strPrice); // There are many other possible ways of doing the same thing... end; |
© 2000-2010 Chilkat Software, Inc. All Rights Reserved.