Esempio n. 1
0
 /**
  *
  * @param \SimpleXmlElement $xml
  * @param object $obj
  *
  * @throws \Exception
  */
 private function appendObjectProperties(\SimpleXMLElement $xml, $obj)
 {
     $clsMeta = new ClassMetadata($obj, $this->configuration);
     foreach ($clsMeta->getProperties() as $prop) {
         $propName = $prop->getName();
         $nodeName = "xmlns:" . $prop->getXmlNodeName();
         $value = $obj->{$propName};
         if (is_object($value)) {
             $this->appendObjectProperties($xml->addChild($nodeName), $value);
         } elseif (is_string($value) && $prop->isScalarValue()) {
             $xml[0] = $value;
         } elseif (is_string($value) && $prop->isAttribute()) {
             $xml->addAttribute($prop->getName(), $value);
         } elseif (is_string($value)) {
             $xml->addChild($nodeName, $value);
         } elseif ((is_int($value) || is_float($value)) && $prop->isScalarValue()) {
             $xml[0] = (string) $value;
         } elseif (is_null($value)) {
             continue;
         } elseif (is_array($value)) {
             if (count($value) == 0) {
                 continue;
             }
             foreach ($value as $itemValue) {
                 if (is_object($itemValue)) {
                     $this->appendObjectProperties($xml->addChild($nodeName), $itemValue);
                 } else {
                     throw new \Exception("Failed to serialize. Only object node arrays supported");
                 }
             }
         } else {
             throw new \Exception("Not implemented yet. Prop: {$propName} cannot be converted to xml node");
         }
     }
 }