質問

PHP QueryPathライブラリを使用して、古いHTMLファイルのコレクションからデータを抽出しています。ほとんどの場合、Find()関数を介して利用可能なCSSセレクターを使用してデータを抽出しています。ただし、私が抽出する必要があるデータを含むすべての要素が一意のCSS識別子を持っているわけではないので、私はRegexpとQueryPathの醜い組み合わせを使用してデータを抽出しています。

<ul class="list><li>Data1</li><li>Data2</li></ul>

たとえば、このリスト要素から「data2」をきれいに抽出するにはどうすればよいですか?たとえば、取得する要素として親要素の2番目の子を指定できるQueryPath関数はありますか?

役に立ちましたか?

解決

NTHマッチングオブジェクトを取得するには、使用できます QueryPath::get(n-1).

他のヒント

実際にこれを行うにはいくつかの方法があります。最も簡単なのは、CSS 3 pseduclassを使用することです :nth-of-type(). 。これにより、ULの内側に2番目のLiが取得されます。

qp($html, 'ul>li:nth-of-type(2)');

:nth-of-type 他のCSS 3セレクターは、「AN+B」ルールと呼ばれるものを取ります。ここでは、グループを構成するアイテムの数を発表し、必要なグループからどのアイテムを言うかを言います。例えば、 tr:nth-of-type(4n+2) テーブルの行を4のグループに分割し、各グループの2番目の要素を返します。 :even:odd ただの速記です 2n2n+1.

調べる価値がある他のCSS:

  • ':nth'
  • ':First-Type'、 ':First'
  • ':last-of-type'、 ':last'
  • ':偶数'、 ':奇妙な
  • ':not()'、 ':has()'、 ':contains()'

また、すべてのLI要素を取得してから、2番目の要素を取得することもできます。

qp($html, 'li')->eq(2);

または、以前のポスターが指摘したように、実際のポスターを取得できます DOMNode 使用する2番目のもののオブジェクト get():

qp($html, 'li')->get(2);

本当に洗練されたニーズがある場合は、使用できます filter() リストを取得し、カスタム関数を使用して実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top