Python Examples

ChilkatHOMEAndroid™ASPVisual BasicVB.NETC#iOS (IPhone)Objective-CC++CMFCDelphiFoxProJavaPerl
PHP ExtensionPHP ActiveXPythonPowerShellRubySQL ServerVBScript

Python Examples

Quick Start
Unicode
Byte Array
Bz2
Certificates
CSV
Email
Encryption
FTP
HTML Conversion
HTTP
IMAP
MHT
MIME
POP3
RSA
S/MIME
Signatures
Socket / SSL
SFTP
SMTP
Spider
SSH Key
SSH
SSH Tunnel
Tar
HTTP Upload
XML
XMP
Zip

More Examples...
String
Amazon S3
Email Object
DKIM / DomainKey
NTLM
FileAccess
RSS
Atom
Self-Extractor
Service
PPMD
Deflate
DH Key Exchange
DSA
Bzip2
LZW

 

 

 

 

 

 

 

Parse SOAP XML

Demonstrates how to parse SOAP XML.

 Chilkat Python Module Downloads for Windows, Linux, and MAC OS X

import sys
import chilkat


xml = chilkat.CkXml()

#  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):
    print xml.lastErrorText()
    sys.exit()

#  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:

# xmlFields is a CkXml
xmlFields = xml.GetChildWithTag("Fields")

#  Iterate over each field:

numChildren = xmlFields.get_NumChildren()
for i in range(0,numChildren):

    # xmlField is a CkXml
    xmlField = xmlFields.GetChild(i)

    if (xmlField.HasChildWithTagAndContent("Code","Message") == True):
        print "Message: " + xmlField.getChildContent("Value")

    #  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):
    print xml.lastErrorText()
    sys.exit()

xml.FirstChild2()
xml.FirstChild2()
xml.FirstChild2()

#  Find the "Fields" node:
# xmlFields is a CkXml
xmlFields = xml.GetChildWithTag("Fields")

#  Get each value:
print "-----"
print "Message: " + xmlFields.getChildContent("Message")
print "AuthCodeResp:" + xmlFields.getChildContent("AuthCodeResp")
print "Balance: " + xmlFields.getChildContent("Balance")


 

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