[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.
When you call findelement() recursively you have to return the value from the recursive call to the next caller up. See example below. Kent > > 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) Should be return findelement(current.firstChild, classtofind, topnode) and similarly wherever you call findelement(). > 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? > -- http://mail.python.org/mailman/listinfo/python-list