2012-11-16 27 views
0

我使用php內部鏈接,DOMDocumentDOM文檔獲得一個H2

我需要做的就是<a>這是一個<h2>標籤

內頁那裏就像是一個列表上的所有href

<h2><a href="blablabla">The title</a></h2> 

只有一個<a>在每個<h2>

我成功地實現了:

  1. 負載通過一個文件:loadfromhtml(需要爲這個項目)
  2. 得到<h2>文檔
  3. 在獲得這些<h2>->nodeValue (caption of url)

所以我問題是,當我試圖在<h2>節點(#2)上執行相同的getElementsByTagName('a')時,php掛起(不再生成輸出,頁面加載停止)

我在哪裏做錯了?謝謝,謝謝。

+2

打開錯誤報告。如果PHP停止產生輸出,那麼可能有一個致命錯誤。 '的error_reporting(E_ALL); ini_set('display_errors',1);' –

+0

VolkerK的回答是正確的,但是感謝Michael Berkowski對於那些顯示錯誤,我用它來調試我的代碼。 – Prozi

回答

1

適合我的作品,例如

<?php 
$doc = new DOMDocument; 
$doc->loadhtml(data()); 

foreach($doc->getElementsByTagName('h2') as $h2) { 
    foreach($h2->getElementsByTagName('a') as $a) { 
     echo $a->getAttribute('href'), ': ', $a->nodeValue, "\n"; 
    } 
} 

function data() { 
    return <<< eoh 
<html> 
    <head><title>...</title></head> 
    <body> 
     <h2><a href="link1">header 1</a></h2> 
     <p>yadda yadda</p> 
     <h2><a href="link2">header 2</a></h2> 
     <p>yadda yadda</p> 
     <h2><a href="link3">header 3</a></h2> 
     <p>yadda yadda</p> 
    </body> 
</html> 
eoh; 
} 

但我覺得它更容易使用XPath這個
例如

<?php 
$doc = new DOMDocument; 
$doc->loadhtml(data()); 
$xpath = new DOMXPath($doc); 

foreach($xpath->query('/html/body//h2/a') as $a) { 
    echo $a->getAttribute('href'), ": ", $a->nodeValue, "\n"; 
} 

function data() { 
    return <<< eoh 
<html> 
    <head><title>...</title></head> 
    <body> 
     <h2><a href="link1">header 1</a></h2> 
     <p>yadda yadda</p> 
     <h2><a href="link2">header 2</a></h2> 
     <p>yadda yadda</p> 
     <h2><a href="link3">header 3</a></h2> 
     <p>yadda yadda</p> 
    </body> 
</html> 
eoh; 
} 

打印

link1: header 1 
link2: header 2 
link3: header 3 
+0

這工作謝謝你! – Prozi