# File /home/ser/Work/rexml/rexml/xpath.rb, line 45 def XPath::filter elements, path return elements if path.nil? or path == '' or elements.size == 0 case path when /^\/u # Descendant return axe( elements, "descendant-or-self", $' ) when /^\?\b(\[\-]*)\b::/u # Axe axe_name = $1 rest = $' return axe( elements, $1, $' ) when /^\(?=\b([:!\_][-\_]*:)?[-!\\_]*\b([^:(]|$)|\)/u # Child rest = $' results = [] elements.each do |element| results |= filter( element.to_a, rest ) end return results when /^\?(\[\-]*)\/u # / Function return function( elements, $1, $' ) when /^\b(([:!\_][-\_]*:)?([-!\\_]*))\b/u # Element name expanded_name=$1 name = $3 ns = $2 ns.chop! if ns rest = $' if false puts "MATCH PARAMETERS:" puts "name muts be #{name}" puts "Functions.namespace_context['#{ns}'] is '#{Functions.namespace_context[ns].to_s}'" puts "CHECKING:" end elements.delete_if do |element| if element.kind_of? Element and false puts "element namespace is '#{element.namespace}'" puts "element name is '#{name}'" puts "element.namespace is #{element.namespace}" end !(element.kind_of? Element and (element.expanded_name == name or (element.name == name and element.namespace == Functions.namespace_context[ns]))) end return filter( elements, rest ) when /^\/u matches = [] elements.each do |element| matches |= predicate( element.to_a, path[1..-1] ) if element.kind_of? Element end return matches when /^\/u # Predicate return predicate( elements, path ) when /^\?\\/u # Ancestor return axe( elements, "ancestor", $' ) when /^\?\/u # Parent return filter( elements.collect{|e|e.parent}, $' ) when /^\?\/u # Self return filter( elements, $' ) when /^\/u # Any results = [] elements.each do |element| results |= filter( [element], $' ) if element.kind_of? Element #if element.kind_of? Element # children = element.to_a # children.delete_if { |child| !child.kind_of?(Element) } # results |= filter( children, $' ) #end end return results end return [] end