On Mon, 2005-10-31 at 14:12, [EMAIL PROTECTED] wrote: > I'm trying to write a website updating script, but when I run the > script, my function to search the DOM tree returns None instead of what > it should. > > I have this program: > -------- > import sys > from xml.dom.minidom import parse > > > # search the tree for an element with a particular class > > def findelement(current, classtofind, topnode = None): > if topnode == None: topnode = current > > > > # if it's an xml element... > if current.nodeType == 1: > print current.nodeName, ':', current.getAttribute('class') > if current.getAttribute('class') == classtofind: > print 'Returning node:', current > return current > elif current.hasChildNodes(): > findelement(current.firstChild, classtofind, topnode) > elif current.nextSibling: > findelement(current.nextSibling, classtofind, topnode) > > elif (current.parentNode != topnode) \ > > and (current.parentNode.nextSibling != None): > > findelement(current.parentNode.nextSibling, classtofind, > topnode) > else: > > print 'Returning None...' > > return None > > # others (text, comment, etc) > > else: > > if current.nextSibling: > > findelement(current.nextSibling, classtofind, topnode) > > elif (current.parentNode != topnode) \ > > and (current.parentNode.nextSibling != None): > > findelement(current.parentNode.nextSibling, classtofind, > topnode) > else: > > print 'Returning None...' > > return None > > > > # parse the document > > blog = parse('/home/noah/dev/blog/template.html') > > > > # find a post > > postexample = findelement(blog.documentElement, 'post') > > > > print 'Got node: ', postexample > > ----- > > My output is this: > > ----- > html : > head : > title : > body : > h1 : > ul : > li : > h2 : > ol : > li : post > Returning node: <DOM Element: li at -0x48599c74> > Got node: None > ----- > > The function finds the right element fine, and says it will return <DOM > Element: li at -0x48599c74>, but the program gets None instead. What's > happening here? Any suggestions?
You have a lot of cases where findelement is called recursively and then its return value is discarded instead of being turned into a return value to the caller. In those cases, execution simply falls off the end of the function and None is returned implicitly (and silently, since you don't have a print "Returning None" at the end of the function). HTH, Carsten. -- http://mail.python.org/mailman/listinfo/python-list