/**
  * Turn a record into a string
  * @param Record $object
  * @return string
  */
 public function getXML(Transformable $object)
 {
     $xml = "\n<record table='{$object->getTableName()}' id='{$object->getId()}'>";
     foreach ($object->getAttributes() as $key => $value) {
         // Need this to make sure the magic getter is called for lazy loading
         $value = $object->{$key};
         $xml .= "\n\t<{$key}>";
         if ($value instanceof XML) {
             $xml .= $value->getXML();
         } else {
             if (is_bool($value)) {
                 $xml .= $value ? "true" : "false";
             } else {
                 if (is_array($value)) {
                     $xml .= ArrayUtil::getXML($value);
                 } else {
                     $xml .= htmlspecialchars($value, ENT_COMPAT, "UTF-8", false);
                 }
             }
         }
         $xml .= "</{$key}>";
     }
     $xml .= "\n</record>";
     return $xml;
 }
 /**
  * Get the pagination, in the future it would be nice to have some additional
  * pagination methods
  * @param TraversableObject $object
  * @return string
  */
 private function getPaginationXML(Transformable $object)
 {
     $xml = "";
     if (ctype_digit("{$object->getResultsPerPage()}")) {
         $xml .= "<pagination>";
         for ($i = 0; $i < $object->getMaxNumResults(); $i += $object->getResultsPerPage()) {
             $selected = $i == $object->getCurrentResultNumber() ? " selected='true'" : "";
             $end = $i + $object->getResultsPerPage() < $object->getMaxNumResults() ? $i + $object->getResultsPerPage() : $object->getMaxNumResults();
             $xml .= "\n                <page{$selected}>\n                    <start>{$i}</start>\n                    <end>{$end}</end>\n                </page>";
         }
         $xml .= "</pagination>";
     }
     return $xml;
 }