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