FoxPro Examples

ChilkatHOMEASPVisual BasicVB.NETC#Visual C++CMFCDelphiFoxProJavaPerlPHPPythonRubySQL ServerVBScript

Visual FoxPro Examples

Bounced Mail
Bz2
Character Encoding
CSV
Digital Certificates
Digital Signatures
Email
FTP
HTML-to-XML
HTTP
IMAP
Encryption
MHT / HTML Email
POP3
RSA
S/MIME
Socket
Spider
SFTP
SMTP
SSH
SSH Key
SSH Tunnel
String
Tar
Upload
XML
XMP
Zip Compression
Self-Extractor

More Examples...
Email Object
DKIM / DomainKey
NTLM
RSS
Atom
Byte Array
Service
PPMD
Deflate
DH Key Exchange
DSA
FileAccess
Bzip2
LZW

 

Non-Chilkat Links
Text and String Handling

Parse SOAP XML

Demonstrates how to parse SOAP XML.

Download Chilkat XML ActiveX

LOCAL lnSuccess
LOCAL loXml
LOCAL loXmlFields
LOCAL i
LOCAL loXmlField
LOCAL lnNumChildren


loXml = CreateObject('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
lnSuccess = loXml.LoadXmlFile("soap1.xml")
IF (lnSuccess = 0) THEN
    =MESSAGEBOX(loXml.LastErrorText)
    QUIT
ENDIF

*  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:
loXml.FirstChild2()
loXml.FirstChild2()
loXml.FirstChild2()

*  Find the "Fields" node:

loXmlFields = loXml.GetChildWithTag("Fields")

*  Iterate over each field:

lnNumChildren = loXmlFields.NumChildren
FOR i = 0 TO lnNumChildren - 1

    loXmlField = loXmlFields.GetChild(i)

    IF (loXmlField.HasChildWithTagAndContent("Code","Message") = 1) THEN
        ? "Message: " + loXmlField.GetChildContent("Value")
    ENDIF

    *  Use the same logic for the other fields you want to capture...

    RELEASE loXmlField
NEXT

RELEASE loXmlFields

*  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>
*  ...
lnSuccess = loXml.LoadXmlFile("soap2.xml")
IF (lnSuccess = 0) THEN
    =MESSAGEBOX(loXml.LastErrorText)
    QUIT
ENDIF

loXml.FirstChild2()
loXml.FirstChild2()
loXml.FirstChild2()

*  Find the "Fields" node:
loXmlFields = loXml.GetChildWithTag("Fields")

*  Get each value:
? "-----"
? "Message: " + loXmlFields.GetChildContent("Message")
? "AuthCodeResp:" + loXmlFields.GetChildContent("AuthCodeResp")
? "Balance: " + loXmlFields.GetChildContent("Balance")

RELEASE loXmlFields

Need a specific example? Send a request to support@chilkatsoft.com

© 2000-2010 Chilkat Software, Inc. All Rights Reserved.

Mail Component · .NET Email Component · ASP Mail Component · XML Parser