/** * Export a single node. * * @param \TYPO3\TYPO3CR\Domain\Model\Node $node * @param \XMLWriter $xmlWriter * @return void */ protected function exportNode(\TYPO3\TYPO3CR\Domain\Model\Node $node, \XMLWriter $xmlWriter) { $xmlWriter->startElement('node'); // node attributes $xmlWriter->writeAttribute('identifier', $node->getIdentifier()); $xmlWriter->writeAttribute('type', $node->getContentType()->getName()); $xmlWriter->writeAttribute('nodeName', $node->getName()); $xmlWriter->writeAttribute('locale', ''); if ($node->isHidden() === TRUE) { $xmlWriter->writeAttribute('hidden', 'true'); } if ($node->isHiddenInIndex() === TRUE) { $xmlWriter->writeAttribute('hiddenInIndex', 'true'); } $hiddenBeforeDateTime = $node->getHiddenBeforeDateTime(); if ($hiddenBeforeDateTime !== NULL) { $xmlWriter->writeAttribute('hiddenBeforeDateTime', $hiddenBeforeDateTime->format(\DateTime::W3C)); } $hiddenAfterDateTime = $node->getHiddenAfterDateTime(); if ($hiddenAfterDateTime !== NULL) { $xmlWriter->writeAttribute('hiddenAfterDateTime', $hiddenAfterDateTime->format(\DateTime::W3C)); } // access roles $accessRoles = $node->getAccessRoles(); if (count($accessRoles) > 0) { $xmlWriter->startElement('accessRoles'); foreach ($accessRoles as $role) { $xmlWriter->writeElement('role', $role); } $xmlWriter->endElement(); } // node properties $properties = $node->getProperties(); if (count($properties) > 0) { $xmlWriter->startElement('properties'); foreach ($properties as $propertyName => $propertyValue) { if (is_object($propertyValue)) { $xmlWriter->startElement($propertyName); $xmlWriter->writeAttribute('__type', 'object'); $xmlWriter->writeAttribute('__classname', get_class($propertyValue)); $this->objectToXml($propertyValue, $xmlWriter); $xmlWriter->endElement(); } elseif (strpos($propertyValue, '<') !== FALSE || strpos($propertyValue, '>') !== FALSE || strpos($propertyValue, '&') !== FALSE) { $xmlWriter->startElement($propertyName); if (strpos($propertyValue, '<![CDATA[') !== FALSE) { $xmlWriter->writeCdata(str_replace(']]>', ']]]]><![CDATA[>', $propertyValue)); } else { $xmlWriter->writeCdata($propertyValue); } $xmlWriter->endElement(); } else { $xmlWriter->writeElement($propertyName, $propertyValue); } } $xmlWriter->endElement(); } // and the child nodes recursively foreach ($node->getChildNodes() as $childNode) { $this->exportNode($childNode, $xmlWriter); } $xmlWriter->endElement(); }