Symfony Crawler コンポーネントを使用して、次のように html を解析しています。
<div> //first level div
<div>1</div> //sub div
<div>2</div>
<div>
<div></div> // more levels and empty divs possible
</div>
</div>
<div>
<div>3</div>
<div>4</div>
</div>
値 1 2 3 4 は異なる場合があるか、空の div に存在しないことさえありますが、div には subDivs などが含まれる場合もあります。それらを処理するために最初のレベルの div を選択する段階で立ち往生しています。Xpath リクエストは、最初のレベルの div とサブディビジョンも返します
$crawler = new Crawler($html);
foreach ($crawler->filterXPath('//div') as $domElement) {
var_dump($domElement->textContent);
}
戻り値
string(2) "12"
string(1) "1"
string(1) "2"
string(2) "34"
string(1) "3"
string(1) "4"
subElements の処理を防ぐために、Xpath リクエストはどのように見えるべきですか?
UPD:
実際のトラブル DOM スキーム
<div> //first level div
<div>1</div> //sub div
<div>2</div>
</div>
<div>
<div>3</div>
<div>4
<div>5</div>
<a>6</a>
</div>
</div>
この DOM ツリーは第 1 レベルの div によって処理され、<a>
タグの存在に応じていくつかのロジックが作成されます。