Помогите с разбором XML в PHP

12
LEOnidUKG
На сайте с 25.11.2006
Offline
1727
#11

Да и регулярки я предложил не на пустом месте, а после тестов своих: https://searchengines.guru/ru/forum/1048944

Но как вижу, что и XMLReader, очень хорошо подтянули.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
danforth
На сайте с 18.12.2015
Offline
153
#12
LEOnidUKG #:

Предельно тупо писать отсебятину, вот человек вверху всё достаточно протестировал.

Ну да, человек протестировал, и что мы видим? Что ...

danforth #:
preg_matchем парсить XML максимально тупо

... потому что это не дает никаких преимуществ в скорости. Более того, ТСу нужно получать свойства каждого конкретного товара, ваше решение выколупывать регулярками iD, Price, и прочее, из вложенных нод, это просто неправильно выбранный инструмент для данной задачи.

Junior Web Developer
LEOnidUKG
На сайте с 25.11.2006
Offline
1727
#13
danforth #:

Ну да, человек протестировал, и что мы видим? Что ...

... потому что это не дает никаких преимуществ в скорости. Более того, ТСу нужно получать свойства каждого конкретного товара, ваше решение выколупывать регулярками iD, Price, и прочее, из вложенных нод, это просто неправильно выбранный инструмент для данной задачи.

Будьте добры, возьмите пример ТС-а и вставьте в SimpleXMLElement или в XMLReader, а после покажите нам результат.

Конечно, уже написал  timo-71 об этом, но я вижу вам бы главное "поддержать разговор".

danforth
На сайте с 18.12.2015
Offline
153
#14
LEOnidUKG #:
а после покажите нам результат.

Результат чего вам показать? Что SimpleXMLIterator позволяет потоково обойти весь файл не вычитывая его в память? 

<?php

try {
    $iterator = new SimpleXMLIterator("./file.xml", LIBXML_NOERROR | LIBXML_PARSEHUGE, true);
    foreach($iterator as $product) {
        foreach($product as $props) {
            $product = [
                "ID" => (string) $props->ID,
                "price_city" => (float) $props->price_city,
            ];
            var_dump($product);
        }
    }
} catch(\Exception $e) {
    echo $e->getMessage();
}

Я конечно понимаю, что вы не приемлите чужих мнений, парсите на здоровье, кто я такой чтобы вам запрещать. Можете ещё и JSON регулярками парсить. Я лишь хочу сказать, что я бы так не делал, потому что это максимально тупая затея, не имеющая никаких преимуществ. Во-первых, регулярку написать сложнее. Во-вторых, она не стабильна (если в XML будет комментарий, например, с <ID>, то ваша регулярка туда сматчится, и вы получите неопределенный результат). В-третьих, у вас нет возможности для перемещения по дереву вверх-вниз. В-четвертых, не нужно вычитывать весь файл в память. Если вы клоните к тому, что регулярки быстрее, то молодец, оптимизировали хотспот так скозать. 

LEOnidUKG
На сайте с 25.11.2006
Offline
1727
#15
$iterator = new SimpleXMLIterator("./file.xml", LIBXML_NOERROR | LIBXML_PARSEHUGE, true);

Вот уже появился полезный код в теме.

Я конечно понимаю,

Увы, ничего вы не понимаете. Создаёте себе каких-то врагов и боритесь с ними. Но хоть так что-то полезное тут появляется.

Как раз решение проблемы, о котором писал ТС

 Гуглил. Те варианты, которые находил в пабликах, дают ошибку.


12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий