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