GIF87a;
require 'rexml/functions' require 'rexml/xpath_parser' module REXML # Wrapper class. Use this class to access the XPath functions. class XPath include Functions # A base Hash object, supposing to be used when initializing a # default empty namespaces set, but is currently unused. # TODO: either set the namespaces=EMPTY_HASH, or deprecate this. EMPTY_HASH = {} # Finds and returns the first node that matches the supplied xpath. # element:: # The context element # path:: # The xpath to search for. If not supplied or nil, returns the first # node matching '*'. # namespaces:: # If supplied, a Hash which defines a namespace mapping. # variables:: # If supplied, a Hash which maps $variables in the query # to values. This can be used to avoid XPath injection attacks # or to automatically handle escaping string values. # # XPath.first( node ) # XPath.first( doc, "//b"} ) # XPath.first( node, "a/x:b", { "x"=>"http://doofus" } ) # XPath.first( node, '/book/publisher/text()=$publisher', {}, {"publisher"=>"O'Reilly"}) def XPath::first element, path=nil, namespaces=nil, variables={} raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash) raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash) parser = XPathParser.new parser.namespaces = namespaces parser.variables = variables path = "*" unless path element = [element] unless element.kind_of? Array parser.parse(path, element).flatten[0] end # Iterates over nodes that match the given path, calling the supplied # block with the match. # element:: # The context element # path:: # The xpath to search for. If not supplied or nil, defaults to '*' # namespaces:: # If supplied, a Hash which defines a namespace mapping # variables:: # If supplied, a Hash which maps $variables in the query # to values. This can be used to avoid XPath injection attacks # or to automatically handle escaping string values. # # XPath.each( node ) { |el| ... } # XPath.each( node, '/*[@attr='v']' ) { |el| ... } # XPath.each( node, 'ancestor::x' ) { |el| ... } # XPath.each( node, '/book/publisher/text()=$publisher', {}, {"publisher"=>"O'Reilly"}) \ # {|el| ... } def XPath::each element, path=nil, namespaces=nil, variables={}, &block raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash) raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash) parser = XPathParser.new parser.namespaces = namespaces parser.variables = variables path = "*" unless path element = [element] unless element.kind_of? Array parser.parse(path, element).each( &block ) end # Returns an array of nodes matching a given XPath. def XPath::match element, path=nil, namespaces=nil, variables={} parser = XPathParser.new parser.namespaces = namespaces parser.variables = variables path = "*" unless path element = [element] unless element.kind_of? Array parser.parse(path,element) end end end
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
dtd | Folder | 0755 |
|
|
formatters | Folder | 0755 |
|
|
light | Folder | 0755 |
|
|
parsers | Folder | 0755 |
|
|
validation | Folder | 0755 |
|
|
attlistdecl.rb | File | 1.89 KB | 0644 |
|
attribute.rb | File | 5.39 KB | 0644 |
|
cdata.rb | File | 1.54 KB | 0644 |
|
child.rb | File | 2.63 KB | 0644 |
|
comment.rb | File | 2.14 KB | 0644 |
|
doctype.rb | File | 6.58 KB | 0644 |
|
document.rb | File | 9.52 KB | 0644 |
|
element.rb | File | 43.85 KB | 0644 |
|
encoding.rb | File | 1.13 KB | 0644 |
|
entity.rb | File | 5.53 KB | 0644 |
|
functions.rb | File | 11.27 KB | 0644 |
|
instruction.rb | File | 2.01 KB | 0644 |
|
namespace.rb | File | 1.09 KB | 0644 |
|
node.rb | File | 2.13 KB | 0644 |
|
output.rb | File | 519 B | 0644 |
|
parent.rb | File | 4.33 KB | 0644 |
|
parseexception.rb | File | 1.22 KB | 0644 |
|
quickpath.rb | File | 9.08 KB | 0644 |
|
rexml.rb | File | 1.65 KB | 0644 |
|
sax2listener.rb | File | 3.6 KB | 0644 |
|
source.rb | File | 7.6 KB | 0644 |
|
streamlistener.rb | File | 3.88 KB | 0644 |
|
syncenumerator.rb | File | 685 B | 0644 |
|
text.rb | File | 13.57 KB | 0644 |
|
undefinednamespaceexception.rb | File | 210 B | 0644 |
|
xmldecl.rb | File | 2.68 KB | 0644 |
|
xmltokens.rb | File | 526 B | 0644 |
|
xpath.rb | File | 3.31 KB | 0644 |
|
xpath_parser.rb | File | 25.7 KB | 0644 |
|