2012-03-30 18 views
1

ich Regex für HTML-Analyse verwenden, aber ich brauche deine Hilfe der folgenden Tabelle zu analysieren:php regex oder html dom Parsen

  <table class="resultstable" width="100%" align="center"> 
       <tr> 
        <th width="10">#</th> 
        <th width="10"></th> 
        <th width="100">External Volume</th> 
       </tr>     
       <tr class='odd'> 
         <td align="center">1</td> 
         <td align="left"> 
          <a href="#" title="http://xyz.com">http://xyz.com</a> 
          &nbsp; 
         </td> 
         <td align="right">210,779,783<br />(939,265&nbsp;/&nbsp;499,584)</td> 
        </tr> 

        <tr class='even'> 
         <td align="center">2</td> 
         <td align="left"> 
          <a href="#" title="http://abc.com">http://abc.com</a> 
          &nbsp; 
         </td> 
         <td align="right">57,450,834<br />(288,915&nbsp;/&nbsp;62,935)</td> 
        </tr> 
      </table> 

ich alle Domains mit ihrem Volumen zum Beispiel (in Array oder var) erhalten möchten

http://xyz.com - 210,779,783 

Sollte ich Regex oder HTML-Dom in diesem Fall verwenden. Ich weiß nicht, wie man einen großen Tisch analysiert, können Sie bitte helfen, danke.

+2

Sie sollten fast immer HTML DOM verwenden. Dieser Fall ist nicht anders. –

+2

Siehe [diese Frage] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags). Sie sollten ** niemals ** HTML mit einem Regex analysieren. –

+0

@Truth können Sie mir bitte mit HTML-DOM helfen, wie ich gerade HTML dom in einfachen Parsing nicht für große Tabelle verwendet habe. Vielen Dank. – seoppc

Antwort

1

Hier ist ein XPath-Beispiel, das den HTML-Code aus der Frage parst.

<?php 
$dom = new DOMDocument(); 
$dom->loadHTMLFile("./input.html"); 
$xpath = new DOMXPath($dom); 

$trs = $xpath->query("//table[@class='resultstable'][1]/tr"); 
foreach ($trs as $tr) { 
    $tdList = $xpath->query("td[2]/a", $tr); 
    if ($tdList->length == 0) continue; 
    $name = $tdList->item(0)->nodeValue; 
    $tdList = $xpath->query("td[3]", $tr); 
    $vol = $tdList->item(0)->childNodes->item(0)->nodeValue; 
    echo "name: {$name}, vol: {$vol}\n"; 
} 
?>