class REXML::XPath

包装类。使用此类访问 XPath 函数。

常量

EMPTY_HASH

一个基础的 Hash 对象,应该在初始化默认空命名空间集合时使用,但目前未使用。待办事项:要么设置 namespaces=EMPTY_HASH,要么弃用它。

公共类方法

each(element, path=nil, namespaces=nil, variables={}, options={}, &block) 点击切换源代码

迭代匹配给定路径的节点,并使用匹配项调用提供的块。

element

上下文元素

path

要搜索的 xpath。如果未提供或为 nil,则默认为“*”

namespaces

如果提供,则是一个定义命名空间映射的 Hash

variables

如果提供,则是一个将查询中的 $variables 映射到值的 Hash。这可以用来避免 XPath 注入攻击,或自动处理转义字符串值。

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| ... }
# File rexml-3.4.0/lib/rexml/xpath.rb, line 60
def XPath::each(element, path=nil, namespaces=nil, variables={}, options={}, &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(**options)
  parser.namespaces = namespaces
  parser.variables = variables
  path = "*" unless path
  element = [element] unless element.kind_of? Array
  parser.parse(path, element).each( &block )
end
first(element, path=nil, namespaces=nil, variables={}, options={}) 点击切换源代码

查找并返回与提供的 xpath 匹配的第一个节点。

element

上下文元素

path

要搜索的 xpath。如果未提供或为 nil,则返回匹配“*”的第一个节点。

namespaces

如果提供,则是一个定义命名空间映射的 Hash。

variables

如果提供,则是一个将查询中的 $variables 映射到值的 Hash。这可以用来避免 XPath 注入攻击,或自动处理转义字符串值。

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"})
# File rexml-3.4.0/lib/rexml/xpath.rb, line 31
def XPath::first(element, path=nil, namespaces=nil, variables={}, options={})
  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(**options)
  parser.namespaces = namespaces
  parser.variables = variables
  path = "*" unless path
  element = [element] unless element.kind_of? Array
  parser.parse(path, element).flatten[0]
end
match(element, path=nil, namespaces=nil, variables={}, options={}) 点击切换源代码

返回匹配给定 XPath 的节点数组。

# File rexml-3.4.0/lib/rexml/xpath.rb, line 72
def XPath::match(element, path=nil, namespaces=nil, variables={}, options={})
  parser = XPathParser.new(**options)
  parser.namespaces = namespaces
  parser.variables = variables
  path = "*" unless path
  element = [element] unless element.kind_of? Array
  parser.parse(path,element)
end