Example #1
0
 /**
  * Extends one node
  *
  * @param Varien_Simplexml_Element $source
  * @param boolean $overwrite
  * @return Varien_Simplexml_Element
  */
 public function extendChild($source, $overwrite = false)
 {
     // this will be our new target node
     $targetChild = null;
     // name of the source node
     $sourceName = $source->getName();
     // here we have children of our source node
     $sourceChildren = $source->children();
     if (!$source->hasChildren()) {
         // handle string node
         if (isset($this->{$sourceName})) {
             // if target already has children return without regard
             if ($this->{$sourceName}->hasChildren()) {
                 return $this;
             }
             if ($overwrite) {
                 unset($this->{$sourceName});
             } else {
                 return $this;
             }
         }
         $targetChild = $this->addChild($sourceName, $source->xmlentities());
         $targetChild->setParent($this);
         foreach ($source->attributes() as $key => $value) {
             $targetChild->addAttribute($key, $this->xmlentities($value));
         }
         return $this;
     }
     if (isset($this->{$sourceName})) {
         $targetChild = $this->{$sourceName};
     }
     if (is_null($targetChild)) {
         // if child target is not found create new and descend
         $targetChild = $this->addChild($sourceName);
         $targetChild->setParent($this);
         foreach ($source->attributes() as $key => $value) {
             $targetChild->addAttribute($key, $this->xmlentities($value));
         }
     }
     // finally add our source node children to resulting new target node
     foreach ($sourceChildren as $childKey => $childNode) {
         $targetChild->extendChild($childNode, $overwrite);
     }
     return $this;
 }
Example #2
0
 /**
  * Convert object attributes to XML
  *
  * @param  array $arrAttributes array of required attributes
  * @param string $rootName name of the root element
  * @return string
  */
 protected function __toXml(array $arrAttributes = array(), $rootName = 'item', $addOpenTag = false, $addCdata = true)
 {
     $xml = '';
     if ($addOpenTag) {
         $xml .= '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
     }
     if (!empty($rootName)) {
         $xml .= '<' . $rootName . '>' . "\n";
     }
     $xmlModel = new Varien_Simplexml_Element('<node></node>');
     $arrData = $this->toArray($arrAttributes);
     foreach ($arrData as $fieldName => $fieldValue) {
         if ($addCdata === true) {
             $fieldValue = "<![CDATA[{$fieldValue}]]>";
         } else {
             $fieldValue = $xmlModel->xmlentities($fieldValue);
         }
         $xml .= "<{$fieldName}>{$fieldValue}</{$fieldName}>" . "\n";
     }
     if (!empty($rootName)) {
         $xml .= '</' . $rootName . '>' . "\n";
     }
     return $xml;
 }