Newbie needs help extracting data from XML

Alan Kennedy alanmk at hotmail.com
Thu Dec 29 12:58:21 CET 2005


[Rodney]
> Im a Python newbie and am trying to get the data out of a series of XML 
> files.

As Paul McGuire already noted, it's unusual to extract information from 
a SOAP message this way: it is more usual to use a SOAP toolkit to do 
the job for you.

But, assuming that you know what you're doing, and that you're doing it 
for good reasons, here's a snippet that uses xpath to do what you want.

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
document = """\
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
   xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:tns="http://www.ExchangeNetwork.net/schema/v1.0/node.wsdl"
   xmlns:types="http://www.ExchangeNetwork.net/schema/v1.0/node.wsdl"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Header>
     <wsu:Timestamp
       xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
       <wsu:Created>2005-12-28T05:59:38Z</wsu:Created>
       <wsu:Expires>2005-12-28T06:04:38Z</wsu:Expires>
     </wsu:Timestamp>
   </soap:Header>
   <soap:Body
     soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
     <q1:NodePingResponse
       xmlns:q1="http://www.ExchangeNetwork.net/schema/v1.0/node.xsd">
       <return xsi:type="xsd:string">Ready</return>
     </q1:NodePingResponse>
   </soap:Body>
</soap:Envelope>
"""

import xml.dom.minidom
import xml.xpath

#dom_tree = xml.dom.minidom.parse('my_xml_file.xml')
dom_tree = xml.dom.minidom.parseString(document)
return_node = xml.xpath.Evaluate('//return', dom_tree)[0]
print "Return status is: '%s'" % return_node.childNodes[0].nodeValue
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

You have to install PyXML to get xpath support: http://pyxml.sf.net

There are other ways to do it, e.g. using ElementTree, but I'll leave it 
to others to suggest the best way to do that.

HTH,

-- 
alan kennedy
------------------------------------------------------
email alan:              http://xhaus.com/contact/alan



More information about the Python-list mailing list