2014-10-29 3 views
1

Допустим, у меня есть этот комментарий блок, содержащий HTML:DOMXPath/DOMDocument - Получение дивы в блоке комментариев

<html> 
<body> 

<code class="hidden"> 
<!-- 
    <div class="a"> 

     <div class="b"> 

      <div class="c"> 
       <a href="link">Link Test 1</a> 
      </div> 

      <div class="c"> 
       <a href="link">Link Test 2</a> 
      </div> 

      <div class="c"> 
       <a href="link">Link Test 3</a> 
      </div> 

     </div> 

    </div> 
--> 
</code> 

<code> 
    <!-- test --> 
</code> 

</body> 
</html> 

Использование DOMXPath для PHP, как я могу получить ссылки и текст в теге?

Это то, что я до сих пор:

$dom = new DOMDocument(); 
    $dom->loadHTML("HTML STRING"); # not actually in code 
    $xpath = new DOMXPath($dom); 
    $query = '/html/body/code/comment()'; 
    $divs = $dom->getElementsByTagName('div')->item(0); 

    $entries = $xpath->query($query, $divs); 

    foreach($entries as $entry) { 

     # shows entire text block 
     echo $entry->textContent; 

    } 

Как перемещаться так, что я могу получить «C» классов, а затем поместить ссылки на массив?

EDIT Пожалуйста, обратите внимание, что существует несколько <code> тегов внутри страницы, так что я не могу просто получить элемент с атрибутом code.

ответ

1

Вы уже можете настроить таргетинг на комментарий, содержащий ссылки, просто следовать за ним и сделать другой запрос внутри него. Пример:

$sample_markup = '<html> 
<body> 

<code class="hidden"> 
<!-- 
    <div class="a"> 

     <div class="b"> 

      <div class="c"> 
       <a href="link">Link Test 1</a> 
      </div> 

      <div class="c"> 
       <a href="link">Link Test 2</a> 
      </div> 

      <div class="c"> 
       <a href="link">Link Test 3</a> 
      </div> 

     </div> 

    </div> 
--> 
</code> 

</body> 
</html>'; 
$dom = new DOMDocument(); 
$dom->loadHTML($sample_markup); # not actually in code 
$xpath = new DOMXPath($dom); 
$query = '/html/body/code/comment()'; 
$entries = $xpath->query($query); 
foreach ($entries as $key => $comment) { 
    $value = $comment->nodeValue; 
    $html_comment = new DOMDocument(); 
    $html_comment->loadHTML($value); 
    $xpath_sub = new DOMXpath($html_comment); 
    $links = $xpath_sub->query('//div[@class="c"]/a'); // target the links! 
    // loop each link, do what you have to do 
    foreach($links as $link) { 
     echo $link->getAttribute('href') . '<br/>'; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^