Формат xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE > <root> <node> <element1></element1> <element2></element2> <element3></element2> <element4></element3> </node> </root> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE > <root> <node> <element1></element1> <element2></element2> <element3></element2> <element4></element3> </node> </root>
и еще несколько объявлений xml после. BTW, размер файла 500 МБ. Я хотел бы попросить о помощи, как разобрать этот файл, не разбирая его на разные файлы с помощью PHP.
Любая помощь будет оценена по достоинству. Спасибо..
Если вы не хотите разделить файл, вам придется работать с ним в памяти. Учитывая размер вашего 500 МБ, это может оказаться проблематичным. Во всяком случае, одним из вариантов было бы удалить XML Prolog и DocType из всех документов, а затем загрузить все это следующим образом:
$dom = new DOMDocument; $dom->loadXML( sprintf( '<?xml version="1.0" encoding="UTF-8"?>%s' . '<!DOCTYPE >%s' . '<roots>%s</roots>', PHP_EOL, PHP_EOL, str_replace( array( '<?xml version="1.0" encoding="UTF-8"?>', '<!DOCTYPE >' ), '', file_get_contents('/path/to/your/file.xml') ) ) );
Это сделало бы его одним огромным XML-файлом только с одним прологом XML и одним DocType (обратите внимание, что я предполагаю, что DocType одинаковый для всех документов в файле). Затем вы можете обработать файл, итерации по отдельным корневым элементам.