getAttribute('name').":\n"; $tname = $reader->getAttribute('name'); if ($db->getDialect() == DB::DIALECT_MSSQL) $db->query("SET IDENTITY_INSERT [{$tname}] ON"); $db->table($tname)->eraseData(); while ($reader->read()) { if ($reader->name == 'table' && $reader->nodeType == XMLReader::END_ELEMENT) return; if ($reader->name == 'row' && $reader->nodeType == XMLReader::ELEMENT) handleRow($reader, $db, $tname); } if ($db->getDialect() instanceof SqlServer) $db->query("SET IDENTITY_INSERT [{$tname}] OFF"); } /** * @ignore */ function handleRow(XMLReader &$reader, DB $db, $tablename) { $rowdata = $reader->readString(); $rowtext = ''.gzuncompress(base64_decode($rowdata)).''; $rowreader = new XMLReader(); $rowreader->xml($rowtext) || die('XML error'); $data = array(); while ($rowreader->read()) { if ($rowreader->name == 'field' && $rowreader->nodeType == XMLReader::ELEMENT) { $name = $rowreader->getAttribute('name'); if (strtolower($rowreader->getAttribute('null'))=='true') $content = NULL; else $content = base64_decode($rowreader->readString()); $data[$name] = $content; } } $db->table($tablename)->insert($data); echo "--\n"; $rowreader->close(); } $reader = new XMLReader(); $reader->open($argv[1]); while ($reader->read()) { if ($reader->name == 'table') { echo "table found\n"; handleTable($reader, $db); } }