2014-11-23 1 views
0

У меня есть следующий код ....PHP - получить ссылки из внутри элемента после того, как элемент был найден

<div class="outer"> 
<div> 
<h1>Christmas</h1> 
<ul> 
    <li>Holiday</li> 
    <li>Fun</li> 
    <li>Joy</li> 
</ul> 
<h1>4th July</h1> 
<ul> 
    <li>Fireworks</li> 
    <li>Happy</li> 
    <li>Spectral</li> 
</ul> 
</div> 
</div> 
<div class="outer"> 
<div> 
<h1>Christmas2</h1> 
<ul> 
    <li>Holiday</li> 
    <li>Fun</li> 
    <li>Joy</li> 
</ul> 
<h1>4th July</h1> 
<ul> 
    <li>Fireworks2</li> 
    <li>Happy</li> 
    <li>Spectral</li> 
</ul> 
</div> 
</div> 

Я уже знаю, что я могу найти DIV, а затем искать внутри DIV для элементов и т.д., делая ...

$doc->loadHTML($output); //$output being the text above 
$xpath = new DOMXpath($doc); 
$elements = $xpath->query('//div[@class="outer"]'); //Check outer 

Я знаю, что выше 3 линии получат элементы внутри DIV в списке, но то, что я действительно хочу, чтобы быть в состоянии сделать, это получить текст [H1], то отобразите значения [li] рядом с каждым H1 ..

выход я смотрю на это ...

Christmas - Holiday, Fun, Joy 
4th July - Fireworks, Happy, Spectral 
Christmas2 - Holiday, Fun, Joy 
4th July2 - Fireworks, Happy, Spectral 
+0

Показать, что вы уже пробовали ... Я не вижу никаких усилий в попытке решить вашу проблему. То, что вы делаете, требует ответа, а не помощи. – ElefantPhace

ответ

1

Да вы можете продолжить использовать xpath, чтобы пересечь элементы в заголовке и получить следующий список: список. Пример:

$doc = new DOMDocument(); 
$doc->loadHTML($output); 
$xpath = new DOMXpath($doc); 
$elements = $xpath->query('//div[@class="outer"]/div'); 
if($elements->length > 0) { 
    foreach($elements as $div) { 
     foreach ($xpath->query('./h1', $div) as $e) { 
      $header = $e->nodeValue; 
      $list = array(); 
      foreach ($xpath->query('./following-sibling::ul/li', $e) as $li) { 

       $list[] = $li->nodeValue; 
      } 

      echo $header . ' - ' . implode(', ', $list) . '<br/>'; 
     } 
     echo '<hr/>'; 
    } 
} 

Sample Output

+0

Ghost Мне пришлось внести изменения в мой запрос, потому что я думал, что он по-прежнему будет работать, если я его модифицирую, но по какой-то причине он не сработает, можете ли вы помочь с пересмотренной версией вверх? – eqiz

+0

@MattHam, если это так, то просто измените первый запрос, так как он имеет другой div внутри '$ elements = $ xpath-> query ('// div [@ class =" outer "]/div [@ class =" inner "] ');' – Ghost

+0

ваш 100% прав, но я имел в виду, что у меня нет класса на том, что я имел в виду ... Я думал, что если я получу основы, я смогу понять и изменить ваш код, так как я Я пришел из ASP.NET, но, видимо, я не так хорош, как думал. Вышесказанное является ТОЧНО структурой того, что я пытаюсь понять, как извлечь данные из. миллион спасибо – eqiz

0

Я использовал phpQuery для этого типа проблемы в прошлом:

// include phpquery 
require('phpQuery/phpQuery.php'); 
// initialize 
$doc = phpQuery::newDocumentHTML($markup); 
// get the text from the various elements 
$h1Value = $doc['h1:first']->text(); // Christmas 
// ... etc. 

(непроверенные)

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