domXpath получить узел предка
У меня есть следующая структура HTML:
<a class="class1" href="link">
<div class="class2" id="result_0">
<img imgstuffhere />
<div class="class3">
<span>text</span>
</div>
</div>
</a>
<a class="class1" href="link">
<div class="class2" id="result_0">
<img imgstuffhere />
<div class="class3">
<span>text</span>
</div>
</div>
</a>
etc....
Я анализирую страницу, используя domXPath. Я могу получить каждый блок, выполнив
$items = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' class1 ')]");
затем я зацикливаюсь на элементах набора результатов:
foreach($items as $item){
$name = $xpath->query("descendant::*[contains(concat(' ', normalize-space(@class), ' '), ' class3 ')]", $item)->item(0)->nodeValue;
etc...
}
Моя проблема в цикле, мне нужно получить ссылку href, расположенную в узле class1.
Я пытался поиграться с вещами предков, но невозможно заставить это работать.
ОТВЕТ
$link = $item->getAttribute('href');
Просто сделал трюк.
1 ответ
$item
это DomNode, представляющий a
элемент, который вы выбрали.
Он имеет свойство атрибутов, которое представляет собой DOMNamedNodeMap, к которому вы должны иметь доступ. Если свойство, которое вы хотите, это href:
$link = $item->attributes->getNamedItem("href")->nodeValue;