2012-05-13 6 views
0


PHPでいくつかのコードを書いて、他のウェブサイトからいくつかの要素を抽出しました。これらの要素はXPathによって処理されます。これらのコードは1つのWebサイトで正常に機能しましたが、もう一方のWebサイトでは失敗しました。したがって、コード全体が間違っているとは限りません。
ところで:私はFirefoxの 'Inspect Element'を使って要素のXPathアドレスを抽出し、要素を右クリックして 'Copy XPath'を選択しました。私のコードはPHPでXPathを正しく抽出できません

2番目のWebサイトで何が問題になっていますか?ここで

おかげ

は、コードは次のとおりです。2番目のページで

//MyCode.PHP 
<html> 
<head> 
<title>This is the title</title> 
</head> 
<body> 

<?php 

class EmDIV 
{ 
    public $url=""; 
    public $content=""; 
    public $name=""; 
    public $query=""; 
    public function EmDIV($CdivName,$Curl,$CQuery) 
    { 
     $this->name=$CdivName; 
     $this->url=$Curl; 
     $this->query=$CQuery; 
     $html = new DOMDocument(); 
     @$html->loadHtmlFile($this->url); 

     $bodies = $html->getElementsByTagName('body'); 
     assert($bodies->length === 1); 
     $body = $bodies->item(0); 
     $xpath = new DOMXPath($html); 
     $nodelist = $xpath->query($this->query); 
     //echo @$body->saveHTML(); 
     if($nodelist->length==1) 
     { 
      $this->content=$nodelist->item(0)->textContent; 
      //sanitizing 
      //$this->content=Jsoup.clean($this->content, Whitelist.basic()); 
     } 
     //echo $nodelist->item(0)->nodeName;   
     foreach ($nodelist as $node) 
      echo $node->getNodePath()."\n";  
    } 
} 

$emdiv=array(
//new EmDIV('parsmalaysia','http://www.parsmalaysia.com/exchange.html','/html/body/div/div[5]/div/div/div/div/div/div/div/div/div/div/table/tbody/tr/td[4]/text()'), 
new EmDIV('atlas-exchange','http://atlas-exchange.com/','/html/body/div/div/table/tr/td/table/tr/td/div/div[10]/div/div/div/table/tr[3]/td[2]/text()'), 
new EmDIV('usunmalaysia','http://www.usunmalaysia.com/Home.aspx','/html/body/form/table/tbody/tr[3]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[4]/td/table/tbody/tr/td/table/tbody/tr/td[2]/div/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr[3]/td/table/tbody/tr[4]/td[2]/text()'), 
); 
?> 

<table border="1"> 
<tr> 
<td>Site</td> 
<td>RM Price</td> 
</tr> 
    <?php 
     foreach ($emdiv as $ed) 
     { 
      echo "<tr>"; 
      echo "<td>".$ed->name."</td>"; 
      echo "<td>".$ed->content."</td>"; 
      echo "</tr>"; 
     } 
    ?> 
</table> 

</body> 
</html> 

答えて

0

一切のtbody要素はありません。すべてのtbody要素をパスから削除する必要があります。 Firefoxはtbody要素をテーブルの内部構造の一部として表示しますが、取得しているマークアップには含まれていません。

関連する問題