Example #1
0
 /**
  * @param \DOMNode|Element $node
  * @param \DOMNode|Document|Element $target
  */
 private function transferNode(\DOMNode $node, \DOMNode $target)
 {
     if ($node->namespaceURI === self::XMLNS_JSONX) {
         if ($target instanceof Document) {
             $normalizedName = $name = 'json:json';
         } else {
             $name = $node->getAttribute('name');
             $normalizedName = QualifiedName::normalizeString($name, self::DEFAULT_QNAME);
         }
         $type = $node->localName;
         $newNode = $target->appendElement($normalizedName);
         if ($name !== $normalizedName && $name !== '') {
             $newNode->setAttribute('json:name', $name);
         }
         switch ($type) {
             case 'object':
                 if ($node('count(*) > 0')) {
                     foreach ($node('*') as $childNode) {
                         $this->transferNode($childNode, $newNode);
                     }
                     return;
                 }
                 break;
             case 'array':
                 foreach ($node('*') as $childNode) {
                     $this->transferNode($childNode, $newNode);
                 }
                 break;
             case 'string':
                 $newNode->append((string) $node);
                 return;
             default:
                 $newNode->append((string) $node);
                 break;
         }
         $newNode->setAttribute('json:type', $type);
     }
 }