Parsing XML with SAX and Python - The Main Code
(Page 6 of 7 )
The following snippet gets the player name from the playerName field of the form:
FormData = cgi.FieldStorage()
searchTerm= FormData["playerName"].value
Now that we have our search term, let’s initiate our parser and handler objects:
parser = make_parser()
curHandler = BasketBallHandler(searchTerm)
With the help of the method setContentHandler(), we connect the implementation of the ContentHandler to our reader instance as it is shown here:
parser.setContentHandler(curHandler)
Finally we parse our XML document:
parser.parse(open('playerStats.xml'))
Here I paste the code of the finished script as a reference:
#!/usr/bin/python"
print "Content-Type: text/plain\n"
print "<html><body>"
from xml.sax import make_parser
from xml.sax.handler import ContentHandler
import cgi
class BasketBallHandler(ContentHandler):
def __init__ (self, searchTerm):
self.searchTerm= searchTerm;
self.isPointsElement, self.isReboundsElement = 0, 0;
def startElement(self, name, attrs):
if name == 'player':
self.playerName = attrs.get('name',"")
self.playerAge = attrs.get('age',"")
self.playerHeight = attrs.get('height',"")
elif name == 'points':
self.isPointsElement= 1;
self.playerPoints = "";
elif name == 'rebounds':
self.isReboundsElement = 1;
self.playerRebounds = "";
return
def characters (self, ch):
if self.isPointsElement== 1:
self.playerPoints += ch
if self.isReboundsElement == 1:
self.playerRebounds += ch
def endElement(self, name):
if name == 'points':
self.isPointsElement= 0
if name == 'rebounds':
self.inPlayersContent = 0
if name == 'player' and self.searchTerm== self.playerName :
print '<h2>Statistics for player:' , self.playerName, '</h2><br>(age:', self.playerAge , 'height' , self.playerHeight , ")<br>"
print 'Match average:', self.playerPoints , 'points,' , self.playerRebounds, 'rebounds'
FormData = cgi.FieldStorage()
searchTerm= FormData["playerName"].value
parser = make_parser()
curHandler = BasketBallHandler(searchTerm)
parser.setContentHandler(curHandler)
parser.parse(open('playerStats.xml'))
print "</body></html>"
Next: Homework >>
More XML Articles
More By Nadia Poulou