def each_element_with_attribute( key, value=nil, max=0, name=nil, &block ) # :yields: Element
      each_with_something( proc {|child| 
        if value.nil?
          child.attributes[key] != nil
        else
          child.attributes[key]==value
        end
      }, max, name, &block )
    end
def each_element_with_attribute( key, value=nil, max=0, name=nil, &block ) # :yields: Element
      each_with_something( proc {|child| 
        if value.nil?
          child.attributes[key] != nil
        else
          child.attributes[key]==value
        end
      }, max, name, &block )
    end
Iterates through the child elements, yielding for each Element that
 has a particular attribute set.
 key::
   the name of the attribute to search for
 value::
   the value of the attribute
 max::
   (optional) causes this method to return after yielding
   for this number of matching children
 name::
   (optional) if supplied, this is an XPath that filters
   the children to check.

  doc = Document.new "<a><b @id='1'/><c @id='2'/><d @id='1'/><e/></a>"
  # Yields b, c, d
  doc.root.each_element_with_attribute( 'id' ) {|e| p e}
  # Yields b, d
  doc.root.each_element_with_attribute( 'id', '1' ) {|e| p e}
  # Yields b
  doc.root.each_element_with_attribute( 'id', '1', 1 ) {|e| p e}
  # Yields d
  doc.root.each_element_with_attribute( 'id', '1', 0, 'd' ) {|e| p e}