visitConcept($node); foreach ($node->childNodes as $child) { $this->walk($child, $visitor); } $visitor->leaveConcept($node); } elseif (self::isTerm($node)) { $visitor->visitTerm($node); } elseif ($node->childNodes !== null) { // Sometimes childNodes is NULL (i.e. DOMText) foreach ($node->childNodes as $child) { $this->walk($child, $visitor); } } } public static function isConcept(DOMNode $node) { return $node instanceof DOMElement && $node->tagName === self::CONCEPT_TAG_NAME; } public static function isTerm(DOMNode $node) { return $node instanceof DOMElement && $node->tagName === self::TERM_TAG_NAME; } }