2012-12-12 20 views
1

我這樣做是這樣的:如何遞歸地獲得每對標籤內的所有單個文本段與DOM文檔

$dom = new DOMDocument; 
$dom->loadHTMLFile("test.html"); 
//$books = $dom->getElementsByTagName('body'); 

$i = 0; 
while (is_object($finance = $dom->getElementsByTagName("body")->item($i))) { 
    foreach ($finance->childNodes as $nodename) { 
     if ($nodename->childNodes) { 
      foreach ($nodename->childNodes as $subNodes) { 
       if ($subNodes->childNodes) { 
        foreach ($subNodes->childNodes as $potha){ 
         echo $potha->nodeName . " - " . $potha->nodeValue . "<br>"; 
        } 
       } else { 
        echo $subNodes->nodeName . " - " . $subNodes->nodeValue . "<br>"; 
       } 
      } 
     } else { 
      echo $nodename->nodeName . " - " . $nodename->nodeValue . "<br>"; 
     } 
    } 
    $i++; 
} 

但我如何使它遞歸所以每次當有subChild,它應循環遍歷每個子節點,子節點和子節點等等.... else echo節點和值的名稱。

另外我怎樣才能得到每個節點相對於身體或html的位置,所以每個節段之間有區別。

+0

請張貼在HTML文件中的示例HTML代碼,並解釋你試圖訪問哪些部分。 –

回答

3

像這樣的東西應該爲你工作:

function treatNode($node) 
{ 
    if ($node->hasChildNodes()) { 
     foreach ($node->childNodes as $child){ 
      treatNode($child); 
     } 
    } else { 
     echo $node->nodeName . " - " . $node->nodeValue . "<br>"; 
    } 
} 

$dom = new DOMDocument; 
$dom->loadHTMLFile("test.html"); 
//$books = $dom->getElementsByTagName('body'); 

$i = 0; 
while (is_object($finance = $dom->getElementsByTagName("body")->item($i))) { 
    treatNode($finance); 
    $i++; 
} 
+0

我無法獲得相對身體或Html標記的位置 – atif

+1

@Alex Mihai,我刪除了我的答案,以便您可以將等級代碼添加到您的身上。 – sunn0

相關問題