迭代所有DOM元素,包括添加的元素

时间:2015-10-27 21:02:37

标签: php dom

我有这种循环遍历所有节点的方法:

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()添加的节点?

1 个答案:

答案 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);
            }
        }
    }
}