예제 #1
0
 /**
  * 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);
     }
 }