code: XSLTElementProcessor getProcessorFor(String uri, String localName) 
  	{
  
      XSLTElementProcessor elemDef = null;  // return value
  
      if (null == m_elements)
        return null;
  
      int n = m_elements.length;
      int order = -1;
  		boolean multiAllowed = true;
      for (int i = 0; i < n; i++)
      {
        XSLTElementDef def = m_elements[i];
  
        // A "*" signals that the element allows literal result
        // elements, so just assign the def, and continue to  
        // see if anything else matches.
        if (def.m_name.equals("*"))
        {
  				
          // Don't allow xsl elements
          if (!equalsMayBeNullOrZeroLen(uri, Constants.S_XSLNAMESPACEURL))
  				{
            elemDef = def.m_elementProcessor;
  				  order = def.getOrder();
  					multiAllowed = def.getMultiAllowed();
  				}
        }
  			else if (def.QNameEquals(uri, localName))
  			{	
  				if (def.getRequired())
  					this.setRequiredFound(def.getName(), true);
  				order = def.getOrder();
  				multiAllowed = def.getMultiAllowed();
  				elemDef = def.m_elementProcessor;
  				break;
  			}
  		}		
  		
  		if (elemDef != null && this.isOrdered())
  		{			
  			int lastOrder = getLastOrder();
  			if (order > lastOrder)
  				setLastOrder(order);
  			else if (order == lastOrder && !multiAllowed)
  			{
  				return null;
  			}
  			else if (order < lastOrder && order > 0)
  			{
  				return null;
  			}
  		}
  
      return elemDef;
    }
docs: Given a namespace URI, and a local name, get the processor
  for the element, or return null if not allowed.
  
  @param uri The Namespace URI, or an empty string.
  @param localName The local name (without prefix), or empty string if not namespace processing.
  
  @return The element processor that matches the arguments, or null.