/** * Processing of IdmlXmlElements. This is the primary procesing engine for PXE tags * @param IdmlXmlElement $element * @param int $depth * @return null */ public function visitXmlElement(IdmlXmlElement $element, $depth = 0) { if ($this->shouldProcessElement($element)) { $xmlContent = $this->elementXmlContent($element); if (strlen($xmlContent) > 0 && strlen($this->currentStoryID) > 0 && $xmlContent != $this->currentStoryID) { return; } if ($xmlContent == 'u615c' || $xmlContent == 'u4d93') { $a = 1; } $tagName = strtolower(str_replace("XMLTag/", "", $element->markupTag)); if (in_array($tagName, $this->ignoredPxeTags)) { return; } $tagMethod = $this->tagHandlerMethodName($tagName); if (method_exists($this, $tagMethod)) { $this->{$tagMethod}($element); return; } $this->verifyParentStructure(); $pxeParent = $this->getPxeParent($element); if (is_object($pxeParent)) { $parentHash = $this->getElementHashTag($pxeParent); if (strlen($parentHash)) { $hashIndex = $this->findParentByHash($parentHash); if ($hashIndex < 0) { $singletonTagName = IdmlPxeHelper::stripHash(IdmlPxeHelper::getFullPxeTag($pxeParent)); if ($this->pxeRules->isSingleton($tagName)) { $this->attributes["_pxeSingletons"][$singletonTagName] = $parentHash; } $this->pushParentTag($singletonTagName, $parentHash, $element); } } } $this->stashParentCount($element); if (!strlen($tagName)) { return; } if (strlen($tagName) > 0 && !IdmlPxeHelper::hasHashValue($element) && $this->pxeRules->isPxeTag($tagName)) { $hashTag = IdmlPxeHelper::getNewTagHash(); } elseif (IdmlPxeHelper::hasHashValue($element)) { $parts = explode('#', $tagName); $hashTag = $parts[1]; } else { CakeLog::debug("[IdmlPxeProducer::visitXmlElement] Unable to process tag {$tagName}. This tag is not valid pxe, and is not in the ignore list"); return; } /* element requires descendants */ if ($this->pxeRules->hasRequiredDescendant($tagName)) { $this->pushParentTag($tagName, $hashTag, $element); return; } /* element has pxe descendants */ if ($this->numPxeElementContainerDecendents($element) > 0) { $this->pushParentTag($tagName, $hashTag, $element); return; } $childHash = ""; /* element is a singleton and already exists in the parent */ if ($this->pxeRules->isSingleton($tagName) && is_object($pxeParent)) { $childHash = $this->getSingletonHash($pxeParent, $tagName); } $this->assignPxeTag($element, $tagName, $childHash); } }