Я использую компонент Symfony Гусеничный для разбора HTML, как это:Получить первые элементы уровня Dóm по Symfony Crawler
<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 и т. д. Я застрял на этапе выбора разделов первого уровня для их обработки. запрос Xpath вернуть мне первый уровень дивы, а также сабдивами
$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"
Как следует запрос 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 дерево должно быть обработана первыми дивами уровня и в зависимости от наличия <a>
тега делает некоторую логику.
что именно вы хотите распечатать? – drkthng
Мне нужно обработать каждый div первого уровня для его содержимого, но я все еще получаю все элементы DIV из дерева DOM, включая subLevels. Решение, подобное «//div[./div]», неприменимо, так как некоторые поддивы также могут иметь DIV в нем. – Tesmen
Наконец, я хотел бы преобразовать этот DOM в конкретный массив для дальнейших логических манипуляций. – Tesmen