Я думаю, что ваша основная проблема в том, что когда вы доберетесь до
if (!$reader->next(XML_PRODUCT_ELEMENT_NAME)) {
break;
}
Вы читали бы последовательность <o>
элементов, а затем, когда закончится первый набор, он доберется до этого, посмотрите, чтоэто не элемент <o>
и выход из цикла чтения. Поэтому сначала закомментируйте / удалите этот код.
Затем, чтобы убедиться, что он читает документ, измените
elseif (!$reader->read()) {
на
if (!$reader->read()) {
, это означает, что этот код будет всегдаработайте в основном цикле, если у вас нет элемента <o>
, и пропускаете любые не связанные узлы.