我有这种循环遍历所有节点的方法:
public function processNode(DOMNode $element){
if($element instanceof DOMElement){
foreach($element->childNodes as $node){
// Adds child nodes and/or modifies the current node
$this->editNode($node);
if($node->hasChildNodes()){
$this->processNode($node);
}
}
}
}
但是,我认为在editNode()
方法中添加节点时,这并不会提取它们并处理这些节点。
我是否有更好的方法来遍历所有节点,包括通过editNode()
添加的节点?
答案 0 :(得分:0)
看起来做for
而不是foreach
是一种更好的方法。然后,当我使用foreach
时,我能够处理被跳过的项目。
public function processNode(DOMNode $element){
if($element instanceof DOMElement){
$nodes = $element->childNodes;
for($i = 0; $i < $nodes->length; $i++){
$node = $nodes->item($i);
$this->editNode($node);
if($node->hasChildNodes()){
$this->processNode($node);
}
}
}
}