2011-12-07 41 views
0

我有以下代碼,它假設通過一組nodeValues循環,並在節點上停止,如果它以特定字母開頭。我很新的循環,但認爲下面的代碼將工作..我做錯了什麼?使用While循環來遍歷DOM節點

$file = $DOCUMENT_ROOT. "http://website.com"; 
$doc = new DOMDocument(); 
@$doc->loadHTMLFile($file); 


$elements = $doc->getElementsByTagName('td'); 

$i=0; 
while (trim(substr($elements->item($i)->nodeValue, 0, 3)) !== "MON" | "TUE"){ 

     echo $elements->item($i)->nodeValue; 
     $i=$i+1; 

     }; 
+0

在'!==='中有''過多''。應該是'!==' –

+0

另外,你在'「Mon」|之間有一個按位或''''| 「TUE」'。也許你打算將當前的'nodeValue'與''Mon「'或''TUE」'進行比較? –

+0

我希望它說「循環此操作,而nodeValue不等於MON或TUE」 – Shawn

回答

0

您的while條件有些顯著的邏輯和操作問題。 |是一個按位或比較,它看起來像你真的想要使用邏輯AND &&,因爲只要節點值不等於MON或TUE,你的循環就需要繼續:

我建議存儲while循環之外的nodeValue和比較變量以提高可讀性:

$i = 0; 
// Store the first node value ahead of the loop 
$currentNode = trim(substr($elements->item($i)->nodeValue, 0, 3)); 
// Test it's neither MON nor TUE 
// That is, "not equal to 'MON' *AND* not equal to 'TUE'" 
while ($currentNode !== "MON" && $currentNode !== "TUE") { 
    echo $elements->item($i)->nodeValue; 
    $i=$i+1; 
    // Then reassign $currentNode after $i increments 
    $currentNode = trim(substr($elements->item($i)->nodeValue, 0, 3));  
}