QueryPathを使用して、任意のHTML要素の内容を取得します
-
29-10-2019 - |
質問
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
ただの速記です 2n
と 2n+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()
リストを取得し、カスタム関数を使用して実行します。