在Hpricot中使用的除数符号(例如)是什么?

时间:2011-01-24 13:17:36

标签: ruby hpricot

在Hpricot文档(https://github.com/hpricot/hpricot)中有一个doc.search()方法。然后,文档继续说“快捷方式是使用除数”:

(doc/"p.posted")

它有效,这是肯定的,但我想知道,这是什么表示法?我以前从未见过它。

3 个答案:

答案 0 :(得分:4)

Hpricot(和Nokogiri,因为它支持Hpricot的快捷方式)支持两种“搜索”快捷方式,(/)和“at”(%)。

Search表示“查找此模式的所有匹配项”,at表示查找第一个匹配项。 Search返回节点列表,而at返回单个节点,当您想要访问节点的内容时,请记住这一点。

通常,at适用于您知道唯一且不想迭代的标签或ID。 Search用于遍历表格中的所有行或文档中的每个<p>标记。您也可以从%链接,这对于查找特定节点非常有用,然后可以降级到该节点。

require 'hpricot'

html = '
<html>
  <head><title>blah</title>
  <body>
    <div id="foo">
      <p>paragraph1</p>
      <p>paragraph2</p>
    </div>
  </body>
</head>
'
doc = Hpricot(html)

doc.at('title').inner_text  # => "blah"
(doc / 'p').last.inner_text # => "paragraph2"
(doc % 'p').inner_text # => "paragraph1"
(doc % '#foo').search('p').size # => 2

我个人推荐Nokogiri而不是Hpricot。它支持所有捷径,但功能更全面,并得到很好的支持。

而且,快捷方式/%不是我见过的任何标准的一部分;它们是Hpricot的本地人,为方便起见,由Nokogiri继承。我不记得在Perl或Python解析器中看过它们。

答案 1 :(得分:3)

符号可能意味着使用重载的/运算符唤起XPath

  

/选择文档根目录(始终是文档元素的父目录)

运算符需要两个参数,LHS提供重载上下文,所以你必须说

doc/"p.posted"

而不仅仅是

/"p.posted"

答案 2 :(得分:2)

/只是一个常规方法,可以用中缀样式调用:

>> 8 / 2 #=> 4
>> 8./ 2 #=> 4

只需为自己的类定义一个:

>> class Myclass
..   def /(n)
..     "Yeah" * n
..     end
..   end #=> nil
>> Myclass.new / 5 #=> "YeahYeahYeahYeahYeah"