/** * 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; }
/** * 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; }