PHP 8.2.31
Preview: xpath.rb Size: 3.31 KB
/proc/thread-self/root/opt/alt/ruby19/lib64/ruby/1.9.1/rexml/xpath.rb

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

Directory Contents

Dirs: 5 × Files: 29

Name Size Perms Modified Actions
dtd DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
light DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
parsers DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
1.89 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
5.39 KB lrw-r--r-- 2010-11-08 20:59:01
Edit Download
1.54 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
2.63 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
2.14 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
6.58 KB lrw-r--r-- 2010-12-07 12:10:23
Edit Download
8.28 KB lrw-r--r-- 2014-11-13 13:39:32
Edit Download
43.85 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
1.49 KB lrw-r--r-- 2011-03-02 15:36:48
Edit Download
5.53 KB lrw-r--r-- 2014-11-13 13:39:32
Edit Download
11.27 KB lrw-r--r-- 2011-05-13 17:54:22
Edit Download
2.01 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
1.09 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
2.13 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
392 B lrw-r--r-- 2011-03-02 15:36:48
Edit Download
4.33 KB lrw-r--r-- 2010-01-31 06:55:06
Edit Download
1.22 KB lrw-r--r-- 2010-10-30 12:10:56
Edit Download
9.08 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
1.65 KB lrw-r--r-- 2013-03-28 09:12:42
Edit Download
3.60 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
7.29 KB lrw-r--r-- 2011-03-02 15:36:48
Edit Download
3.88 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
685 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
13.57 KB lrw-r--r-- 2013-03-28 09:12:42
Edit Download
210 B lrw-r--r-- 2007-11-16 01:30:29
Edit Download
2.78 KB lrw-r--r-- 2011-03-02 15:36:48
Edit Download
526 B lrw-r--r-- 2010-04-05 21:08:12
Edit Download
3.31 KB lrw-r--r-- 2011-05-18 21:19:18
Edit Download
25.70 KB lrw-r--r-- 2011-05-11 22:56:13
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).