Запрос DOMXpath () не обеспечивает ожидаемой контекстной выборки

Помощь высоко ценится.

Невозможно заставить DOMXpath извлекать необходимые DOMN-узлы в контексте.
Как-то на каждом for итерация $a это DOMNodeList (length = 31) того, что кажется все <a> из всего DOM вместо ожидаемых детей только один $childNode от всех (и длина должна быть 4).

ИМХО: для меня это похоже контекст остается в корне HTML, а не меняется соответственно foreach… Если так, возможно ли изменить его поведение в соответствии с требованиями?

Постскриптум Вуола!, попытался изменить запрос Xpath $a = $xpath->query('.') и получил DOMElement->tagName="html",
Итак, в дополнение к мой предыдущий вопрос о DOMXpath DOMNodeList кажется, что DOMDocument не дает чёрт побери о DOMXpath. Нет связи между этими двумя, нет использования контекста …

Ответ: Мех, я просто слепой идиот … пропустил 2-й параметр DOMXpath :: query ()

$dom = new DOMDocument();
$dom -> loadHTML('HTML data');
$xpath = new DOMXpath($dom);

$myDivs = $xpath -> query('//div[@price]');

for($i=0; $i <= $myDivs->length-1; $i++) {

$childNodes = $myDivs->item($i)->childNodes;

foreach($childNodes as $childNode){
$a=$xpath->query('.//a[@data-image-src]');

if($a){
usleep(1);
}

}

0

Решение

Вы должны предоставить контекстный узел в качестве второго аргумента DOMXPath::query() метод.

В вашем конкретном случае это будет:

$a = $xpath->query('.//a[@data-image-src]', $childNode);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector