2

Hpricot のドキュメント ( https://github.com/hpricot/hpricot ) には、doc.search() メソッドがあります。次に、ドキュメントは「除数を使用するのが近道です」と述べています。

(doc/"p.posted")

それは動作します、それは確かですが、私は疑問に思っています、これは何の表記ですか?今まで出会ったことがありません。

4

3 に答える 3

4

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 のパーサーで見た記憶がありません。

于 2011-01-25T01:57:02.637 に答える
3

この表記は、おそらくオーバーロードされた演算子を使用してXPathを呼び出すことを意図しています。/

/ ドキュメント ルート (常にドキュメント要素の親) を選択します。

演算子には 2 つの引数が必要で、LHS はオーバーロード コンテキストを提供するので、次のように言う必要があります。

doc/"p.posted"

だけではなく

/"p.posted"
于 2011-01-24T17:11:51.277 に答える
2

/中置スタイルで呼び出すことができる単なる通常のメソッドです。

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

独自のクラス用に 1 つ定義するだけです。

>> class Myclass
..   def /(n)
..     "Yeah" * n
..     end
..   end #=> nil
>> Myclass.new / 5 #=> "YeahYeahYeahYeahYeah"
于 2011-01-24T13:48:40.353 に答える