/**
  * Adds the xsi:type to the DOMNode generated from the corresponding object.
  * @param DOMNode $domNode the DOM node corresponding to the object
  * @param $object the object used to determine the xsi:type
  * @access private
  */
 private function AddXsiType(DOMNode $domNode, $object)
 {
     $xsiType = $domNode->getAttributeNS(self::$XSI_NAMESPACE, 'xsi:type');
     if (method_exists($object, 'getXsiTypeName') && method_exists($object, 'getNamespace') && empty($xsiType)) {
         $xsiTypeName = $object->getXsiTypeName();
         if (isset($xsiTypeName) && $xsiTypeName != '') {
             $prefix = $domNode->lookupPrefix($object->getNamespace());
             $domNode->setAttributeNS(self::$XSI_NAMESPACE, 'xsi:type', (isset($prefix) ? $prefix . ':' : '') . $xsiTypeName);
         }
     }
 }
Example #2
0
 /**
  * Transfer an array value into a target element node. Sets the json:type attribute to 'array' and
  * creates child element nodes for each array element using the default QName.
  *
  * @param \DOMNode|\DOMElement|\DOMDocumentFragment $target
  * @param array $value
  * @param int $recursions
  */
 private function transferArrayTo(\DOMNode $target, array $value, $recursions)
 {
     $parentName = '';
     if ($target instanceof Element) {
         $target->setAttributeNS(self::XMLNS, 'json:type', 'array');
         $parentName = $target->getAttributeNS(self::XMLNS, 'name') ?: $target->localName;
     }
     foreach ($value as $item) {
         $target->appendChild($child = $target->ownerDocument->createElement($this->getQualifiedName($parentName, self::DEFAULT_QNAME, TRUE)));
         $this->transferTo($child, $item, $recursions);
     }
 }