2014-10-30 139 views
2

我必須從網站的div中恢復一些消息。通過DOMDocument獲取DIV元素內容PHP

的HTML標記:DIV的結構如下

<ul id="news-accordion" class="rounded" style="padding: 2px;"> 
    <li class="o"> 
     <h3> 
      <span>TITLE ARTICLE</span> 
      <span>30/10/2014</span> 
     </h3> 
     <div style="display: none;"> 
       <p>text of article</p> 
     </div> 
    </li> 
    <li class="e"> 
     <h3> 
      <span>TITLE ARTICLE</span> 
      <span>28/10/2014</span> 
     </h3> 
     <div style="display: none;"> 
       <p>text of article</p> 
     </div> 
    </li> 
    <li class="o"> 
     <h3> 
      <span>TITLE ARTICLE</span> 
      <span>29/10/2014</span> 
     </h3> 
     <div style="display: none;"> 
       <p>text of article</p> 
     </div> 
    </li>              
</ul> 

PHP

<?php 

$doc = new DomDocument; 
$doc->validateOnParse = true; 
$doc->loadHtml(file_get_contents('http://www.xxxxxxxxx/news.php')); 

$news = $doc->getElementById('news-accordion'); 

$li = $news->getElementsByTagName('li'); 

foreach ($li as $row){ 

    $title = $row->getElementsByTagName('h3'); 
    echo $title->item(0)->nodeValue."<br><br>"; 

    /*foreach ($title as $row2){ 
    echo $row2->nodeValue."<br><br>"; 
    //echo $row2->item(0)->nodeValue."<br><br>"; 
    }*/ 

    $text = $row->getElementsByTagName('p'); 
    echo utf8_decode($text->item(0)->nodeValue)."<br><br><br>"; 

} 

?> 

代碼工作正常,但是當我打印span標籤echo $title->item(0)->nodeValue;的內容,

兩個跨度的文本一起打印。

如何分別取兩個跨度的內容?謝謝。

回答

2

是的,你可以,只需調整->item()指數。就像你在其他元素已經做了什麼,它指向頭元素,那麼就明確地將它指向那些跨度孩子:

foreach ($li as $row){ 

    $h3 = $row->getElementsByTagName('h3')->item(0); 
    $title = $h3->getElementsByTagName('span')->item(0); // first span 
    $date = $h3->getElementsByTagName('span')->item(1); // second span 

    echo $title->nodeValue . '<br/>'; 
    echo $date->nodeValue . '<br/>'; 

    $text = $row->getElementsByTagName('p'); 
    echo utf8_decode($text->item(0)->nodeValue)."<br><br><br>"; 

} 
+0

非常感謝你! – WhiteLine 2014-10-30 14:09:17

+0

@WhiteLine確定我很高興這有幫助 – Ghost 2014-10-30 14:10:06

-1
$title = $row->getElementsByTagName('h3'); 
echo $title->item(0)->nodeValue."<br><br>"; 

替換上述兩線下方(而不是使用h3標籤使用span標籤)

$title = $row->getElementsByTagName('span'); 
echo $title->item(0)->nodeValue."<br><br>"; 
echo $title->item(1)->nodeValue."<br><br>"; 

這對我有用。