0

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

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

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

4

2 に答える 2

3

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

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

:nth-of-typeおよびその他の CSS 3 セレクターは、「an+b」ルールと呼ばれるものを使用します。このルールでは、グループを構成するアイテムの数を指定し、グループのどのアイテムを必要とするかを指定できます。たとえば、tr:nth-of-type(4n+2)テーブルの行を 4 つのグループに分割し、各グループの 2 番目の要素を返します。:evenandはand:oddの略記です。2n2n+1

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

  • ':nth'
  • ':first-of-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()してリストを取得し、それをカスタム関数で実行できます。

于 2012-05-23T13:32:05.907 に答える
1

n 番目に一致したオブジェクトを取得するには、 を使用できますQueryPath::get(n-1)

于 2011-03-24T03:06:16.123 に答える