在 Hpricot 文档(位于https://github.com/hpricot/hpricot)中有一个 doc.search() 方法。然后文档继续说“捷径是使用除数”:
(doc/"p.posted")
它可以工作,这是肯定的,但我想知道,这是什么符号?我以前从未遇到过。
在 Hpricot 文档(位于https://github.com/hpricot/hpricot)中有一个 doc.search() 方法。然后文档继续说“捷径是使用除数”:
(doc/"p.posted")
它可以工作,这是肯定的,但我想知道,这是什么符号?我以前从未遇到过。
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 解析器中看到过它们。
该表示法可能是为了使用重载运算符调用XPath/
:
/ 选择文档根(始终是文档元素的父级)
运算符需要两个参数,LHS 提供重载上下文,所以你必须说
doc/"p.posted"
而不仅仅是
/"p.posted"
/
只是一个常规方法,可以以中缀样式调用:
>> 8 / 2 #=> 4
>> 8./ 2 #=> 4
只需为您自己的类定义一个:
>> class Myclass
.. def /(n)
.. "Yeah" * n
.. end
.. end #=> nil
>> Myclass.new / 5 #=> "YeahYeahYeahYeahYeah"