Задать вопрос
besogonskiy
@besogonskiy
работаю php laravel разработчиком.

Как переместится на n-ную запись в большом xml при помощи XMLReader?

файл xml имеет большой размер и обычные способы (simple_xml) и другие, которые загружают xml сразу в памят не справляются.

В данном случае интересует как перемещаться внутри xml файла сразу на какую-нибудь по номеру запись используя XMLReader?

Например, открыл файл, считал данные по 100 000 товарам последовательно, добавил их в базу, а на следующий день хочеш запустить скрипт, чтоб он прошелся уже по 100 000 следующих товаров.

Нигде не нашел как это реализовать.

Предположем структура очень простая:

<products>
  <product>Товар 1</product>
  <product>Товар 2</product>
  <product>Товар 3</product>
  <product>Товар 4</product>
.....
</products>
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Один раз пройтись по большому файлу и разбить его на маленькие с нужным количеством товаров в каждом. Читать через XMLReader, записывать через XMLWriter с периодическим flush.
Ответ написан
@iljaGolubev
В php XMLReader нет возможности перейти на произвольную строку. При каждом запуске чтение начинается с начала файла. Значит нужно читать последовательно до того продукта на котором закончилась прошлая обработка.
//Псевдокод. не проверял.

$lastProductIndex=100000;
// сначала нужно дочитать до <products>
// потом перебирать <product>
while($xmlReader->next("product") && --$lastProductIndex) {
    // skip
}
if($lastProductIndex==0){
    // тут последний обработанный прошлый раз
}else{
    // продуктов стало меньше? 
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы