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