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