使用While循环遍历DOMNodes

时间:2011-12-07 20:04:06

标签: php html dom

我有以下代码,它假设循环一组nodeValues并在节点上停止,如果它以特定字母开头。我对循环很新,但认为下面的代码可以工作..我做错了什么?

$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;

        };

1 个答案:

答案 0 :(得分:0)

您的while条件中存在一些重要的逻辑和操作符问题。 |是一个按位OR比较,看起来你真的想要使用逻辑AND &&,因为只要节点值不等于MON或TUE,你的循环就需要继续:

我建议将nodeValue存储在while循环之外,并比较变量的可读性:

$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));    
}