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; 
Другие вопросы по тегам