2015-03-03 2 views
0

Не совсем уверен, что я спрашиваю об этом правильно, но здесь он идет. У меня есть HTML файл со следующей структурой:PHP Dom Parse-Как получить несколько детей

<div class="tbody"> 
    <div class="row"> 
    <div class="col th"> 
    <a class="channel_sched_link" href="javascript:void(0)" title="Channel A schedule" data-channelid="9"> 
    <img src="http://xxxxx/images/tv/A.JPG" width="30" height="20"  alt="Channel A" />Channel A </a> 
    </div> 
    <div class="prog_cols"> 
    <div class="col ts ts_1 prog_802176 ps_0" data-catid="" > 
    <span class="prog_name">First Program</span> 
    <div class="prog_time">February 24, 2015, 4:00 pm - 6:00 pm</div> 
    <a class="btn_watchlist " href="javascript:void(0)" data-progid="802176"> (+) add to watchlist</a> 
<div class="prog_desc"> 
This is the first program for channel A.<br/> 
<a class="watchnow" href="http://xxxx/channels/?q=Channel A">Watch Now</a> 
</div> 
</div> 
<div class="col ts ts_3 prog_802177 ps_1" data-catid="" > 
<span class="prog_name">Second Program</span> 
<div class="prog_time">February 24, 2015, 6:00 pm - 8:00 pm</div> 
<a class="btn_watchlist " href="javascript:void(0)" data-progid="802177">(+)  add to watchlist</a> 
<div class="prog_desc"> 
This is the second program for channel A.<br/> 
<a class="watchnow" href="http://www.xxxxx/channels/?q=Channel A">Watch Now</a> 
</div> 
</div> 
</div> 
<a class="watchnow" href="http://xxxx/channels/?q=Channel A">Watch Now</a> 
</div> 
<div class="row"> 
<div class="col th"> 
<a class="channel_sched_link" href="javascript:void(0)" title="Channel B  schedule" data-channelid="1"> 
<img src="http://xxxx/images/tv/B.gif" width="30" height="20" alt="Channel B"                               />Channel B </a> 
</div> 
<div class="prog_cols"> 
<div class="col ts ts_1 prog_802210 news ps_0" data-catid="news" > 
<span class="prog_name">First Program</span> 
<div class="prog_time">February 24, 2015, 5:00 pm - 6:00 pm</div> 
<a class="btn_watchlist " href="javascript:void(0)" data-progid="802210">(+) add to watchlist</a> 
<div class="prog_desc"> 
First Program Channel B.<br/> 
<a class="watchnow" href="http://xxxxxx/channels/?q=Channel B">Watch Now</a> 
</div> 
</div> 

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

 $programname = $xpath->query('//span[@class="prog_name"]'); 

После того, как я получаю это я спасаю он вместе с другой информацией в XML-файл. Как я могу разобрать каждое имя prog_name для каждого канала. Я знаю, что это, вероятно, имеет какое-то отношение к циклу, но я в недоумении. Не каждый канал имеет одинаковое количество prog_name.

+0

да что-то делать с петлей, вы можете использовать 'foreach' – Ghost

ответ

1

Это прекрасно работает с HTML:

$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$xpath = new DOMXpath($dom); 
$childs = $xpath->query('//span[@class="prog_name"]'); 

foreach ($childs as $child) 
{ 
    var_dump($child->nodeValue); 
} 

Она возвращает:

string(13) "First Program" 
string(14) "Second Program" 
string(13) "First Program"