Помощь высоко ценится.
Невозможно заставить 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);
}
}
Вы должны предоставить контекстный узел в качестве второго аргумента DOMXPath::query()
метод.
В вашем конкретном случае это будет:
$a = $xpath->query('.//a[@data-image-src]', $childNode);
Других решений пока нет …