Problem parsing SOAP envelope with ElementTree

Waldemar Osuch waldemar.osuch at gmail.com
Wed May 7 04:12:04 EDT 2008


Zvi wrote:
> Hi All,
> 
>    Can someone tell me why id the following not working?

snip not working code

> 
> What am I doing wrong?

Here is working code.

8<-----------------------------
from xml.etree import ElementTree as ET

data = """<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>
<Get2Response xmlns="http://tempuri.org/">
<Get2Result><![CDATA[<?xml version='1.0' encoding='UTF-8'?>
<Response>
<Entity Name='Accounts' Current='00300571B42F1DEC8E9B6CDF19A59950'>
<Instance Id='00300571B42F1DEC8E9B6CDF19A59950'>
<Field Name='Status' Value='2'/>
<Field Name='Id' Value='MC4670'/>
<Field Name='Name' Value='ACDC Industries Inc'/>
<Field Name='City' Value='Milwaukee'/>
<Field Name='MainContact' Value=''/>
<Field Name='CreatedOn' Value='20070723051316.0000000 '/>
</Instance>
</Entity>
</Response>]]>
</Get2Result>
</Get2Response>
</soap:Body>
</soap:Envelope>"""

env = ET.fromstring(data)
result = env.find('*//{http://tempuri.org/}Get2Result')
response = ET.fromstring(result.text)
for elm in response.getiterator():
     print elm
8<-----------------------------------------

In the future please paste complete examples. It helps me to help you.
They were two things that I found to be wrong:
- searching using wrong path. You missed *// in front of the tag
- parsing only once. There are two xml sources here.
   The first parse got you the representation of the Envelope.
   You have to parse the Get2Result payload to get at the
   interesting part

Waldemar



More information about the Python-list mailing list