Hpricot のドキュメント ( https://github.com/hpricot/hpricot ) には、doc.search() メソッドがあります。次に、ドキュメントは「除数を使用するのが近道です」と述べています。
(doc/"p.posted")
それは動作します、それは確かですが、私は疑問に思っています、これは何の表記ですか?今まで出会ったことがありません。
Hpricot のドキュメント ( https://github.com/hpricot/hpricot ) には、doc.search() メソッドがあります。次に、ドキュメントは「除数を使用するのが近道です」と述べています。
(doc/"p.posted")
それは動作します、それは確かですが、私は疑問に思っています、これは何の表記ですか?今まで出会ったことがありません。
Hpricot (および Hpricot のショートカットをサポートしているため Nokogiri) は、"検索" ( /
) と "at" ( %
) の 2 つのショートカット メソッドをサポートしています。
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
個人的にはプリコよりノコギリがオススメです。すべてのショートカットをサポートしていますが、より多くの機能を備えており、非常によくサポートされています。
そして、ショートカット/
と%
は、私が見た標準の一部ではありません。それらは Hpricot にローカルであり、利便性のために Nokogiri に継承されました。Perl や Python のパーサーで見た記憶がありません。
この表記は、おそらくオーバーロードされた演算子を使用してXPathを呼び出すことを意図しています。/
/ ドキュメント ルート (常にドキュメント要素の親) を選択します。
演算子には 2 つの引数が必要で、LHS はオーバーロード コンテキストを提供するので、次のように言う必要があります。
doc/"p.posted"
だけではなく
/"p.posted"
/
中置スタイルで呼び出すことができる単なる通常のメソッドです。
>> 8 / 2 #=> 4
>> 8./ 2 #=> 4
独自のクラス用に 1 つ定義するだけです。
>> class Myclass
.. def /(n)
.. "Yeah" * n
.. end
.. end #=> nil
>> Myclass.new / 5 #=> "YeahYeahYeahYeahYeah"