Returns a recursive iterator over all Nodes under top.
    
    If skiphidden is True (the default) then structure branches starting with
    an underscore will be ignored.

def walknode(top, skiphidden=True):
    """Returns a recursive iterator over all Nodes under top.
    
    If skiphidden is True (the default) then structure branches starting with
    an underscore will be ignored.
    """
    if skiphidden and top.name.startswith('._'):
        return
        
    yield top
    for child in top:
        for c in walknode(child):
            yield c