DOMDocument长度更改后,foreach停止

时间:2014-07-16 11:38:03

标签: php foreach domdocument

我遇到了forach循环和replaceChild的问题,因为当我替换foreach循环的Child时,它会停止。我该如何防止这种行为?

这是我的代码;

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($this->template);
foreach ($dom->getElementsByTagName("func") as $pnode) {
  echo "CALLED!";
  $attr = $pnode->getAttribute('type');
  $function = $pnode->nodeValue;
  if (array_key_exists($function, parent::$located_functions)) {
    $arr = parent::$located_functions[$function];
    if (class_exists($arr[1])) {
      $call = $arr[1]::$arr[0]();
      $divnode = $dom->createElement("div");
      $this->addHTML($divnode, $call);
      $pnode->parentNode->replaceChild($divnode, $pnode);
      echo "LNG: " . $dom->getElementsByTagName("func")->length;
      $this->template = $dom->saveXML($pnode->parentNode);
    }
  }
}

在我开始编写脚本之前" $ dom-> getElementsByTagName(" func") - > length"是2," LNG:"在replaceChild之后给我1(因为我用$ call替换了它的HTML代码)。现在循环似乎停止了(也许他认为他已经完成了循环,因为长度现在为1,他的长度为1)。 如果我不调用replaceChild,它将按预期工作,但使用replaceChild它不起作用。 "调用"也只显示一次,因此if-clause不应该是问题。

但是我怎么能阻止这个呢?

0 个答案:

没有答案