2014-01-10 6 views
0

У меня есть следующий HTML структура:DOMXPath получить предок узел

<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 ссылку, расположенную в узел класса1.

Я попытался поиграть с вещами предков, но это невозможно сделать.

ОТВЕТ

$link = $item->getAttribute('href'); 

Просто сделал трюк.

+1

Не является ли элемент $ <'элемент '? У вас уже есть это. – Jessica

+1

'содержит (concat ('', normalize-space (@class), ''), 'class1')' можно сделать намного более эффективным, просто написав 'contains (@class, 'class1')' – ChicagoRedSox

+0

@Jessica Да , но как я могу получить ссылку? – user2733521

ответ

1

$item является DomNode, представляющий элемент a, который вы выбрали.

У этого свойства атрибутов есть DOMNamedNodeMap, к которым вы должны иметь доступ. Если требуемая недвижимость - это href:

$link = $item->attributes->getNamedItem("href")->nodeValue; 
Смежные вопросы