Example #1
0
 /**
  * @param \SimpleXMLElement $dom
  * @return Table
  */
 public static function parseDom(\SimpleXMLElement $dom, AbstractBuilder $builder = null)
 {
     $table = new Table();
     $root_attrs = $dom->attributes();
     $_table_attrs = array();
     foreach ($root_attrs as $key => $val) {
         $key = strtolower($key);
         $val = (string) $val;
         switch ($key) {
             case 'name':
                 $table->setTableName($val);
                 break;
             default:
                 $_table_attrs[$key] = $val;
                 break;
         }
     }
     $nodes = $dom->children();
     foreach ($nodes as $node) {
         $name = $node->getName();
         $name = strtolower($name);
         if ($name == 'fields') {
             $field_list = $node->xpath("field");
             foreach ($field_list as $field) {
                 XMLFactory::parse_field($table, $field, $builder);
             }
         } else {
             if ($name == 'index') {
                 if ($builder) {
                     $index_children = $node->children();
                     $index_attrs = $node->attributes();
                     $_attrs = array();
                     $_idx = array();
                     foreach ($index_attrs as $key => $val) {
                         $key = strtolower($key);
                         $_attrs[$key] = (string) $val;
                     }
                     foreach ($index_children as $idx) {
                         $fname = (string) $idx;
                         $_idx[] = $fname;
                     }
                     $builder->addIndex($_attrs, $_idx);
                 }
             } else {
                 if ($builder) {
                     if ($name == 'comment') {
                         $_table_attrs['comment'] = (string) $node;
                     }
                 }
             }
         }
     }
     if ($builder) {
         $builder->setTableName($table->getTableName());
         $builder->setTableAttrs($_table_attrs);
         $builder->setPrimaryKeys($table->getPrimaryKeys());
     }
     return $table;
 }