document = $document; } public function enterNode(Node $node) { $node->setAttribute('ownerDocument', $this->document); if (!empty($this->stack)) { $node->setAttribute('parentNode', end($this->stack)); } if (isset($this->previous) && $this->previous->getAttribute('parentNode') === $node->getAttribute('parentNode')) { $node->setAttribute('previousSibling', $this->previous); $this->previous->setAttribute('nextSibling', $node); } $this->stack[] = $node; } public function leaveNode(Node $node) { $this->previous = $node; array_pop($this->stack); } }