. */ namespace App\Services\ImportExportSystem\PartKeeprImporter; class MySQLDumpXMLConverter { /** * Converts a MySQL dump XML file to an associative array structure in the following form * [ * 'table_name' => [ * [ * 'column_name' => 'value', * 'column_name' => 'value', * ... * ], * [ * 'column_name' => 'value', * 'column_name' => 'value', * ... * ], * ... * ], * * @param string $xml_string The XML string to convert * @return array The associative array structure */ public function convertMySQLDumpXMLDataToArrayStructure(string $xml_string): array { $dom = new \DOMDocument(); $dom->loadXML($xml_string); //Check that the root node is a node $root = $dom->documentElement; if ($root->nodeName !== 'mysqldump') { throw new \InvalidArgumentException('The given XML string is not a valid MySQL dump XML file!'); } //Get all nodes (there must be exactly one) $databases = $root->getElementsByTagName('database'); if ($databases->length !== 1) { throw new \InvalidArgumentException('The given XML string is not a valid MySQL dump XML file!'); } //Get the node $database = $databases->item(0); //Get all nodes $tables = $database->getElementsByTagName('table_data'); $table_data = []; //Iterate over all nodes and convert them to arrays foreach ($tables as $table) { $table_data[$table->getAttribute('name')] = $this->convertTableToArray($table); } return $table_data; } private function convertTableToArray(\DOMElement $table): array { $table_data = []; //Get all nodes $rows = $table->getElementsByTagName('row'); //Iterate over all nodes and convert them to arrays foreach ($rows as $row) { $table_data[] = $this->convertTableRowToArray($row); } return $table_data; } private function convertTableRowToArray(\DOMElement $table_row): array { $row_data = []; //Get all nodes $fields = $table_row->getElementsByTagName('field'); //Iterate over all nodes foreach ($fields as $field) { $row_data[$field->getAttribute('name')] = $field->nodeValue; } return $row_data; } }