Как использовать XMLReader в PHP?

Находят Процедуры Ключевым словом

, Какие процедуры содержат определенную часть текста (Имя таблицы, имя столбца, имя переменной, TODO, и т.д.)?

SELECT OBJECT_NAME(ID) FROM SysComments 
WHERE Text LIKE '%SearchString%' 
AND OBJECTPROPERTY(id, 'IsProcedure') = 1
74
задан Benjamin 9 April 2016 в 10:31
поделиться

2 ответа

Все зависит от размера единицы работы, но я думаю, вы пытаетесь обработать каждую < product /> узлов подряд.

Для этого самым простым способом было бы использовать XMLReader для доступа к каждому узлу, а затем использовать SimpleXML для доступа к ним. Таким образом, вы сохраняете низкий уровень использования памяти, потому что обрабатываете по одному узлу за раз, и вы по-прежнему пользуетесь простотой использования SimpleXML. Например:

$z = new XMLReader;
$z->open('data.xml');

$doc = new DOMDocument;

// move to the first <product /> node
while ($z->read() && $z->name !== 'product');

// now that we're at the right depth, hop to the next <product/> until the end of the tree
while ($z->name === 'product')
{
    // either one should work
    //$node = new SimpleXMLElement($z->readOuterXML());
    $node = simplexml_import_dom($doc->importNode($z->expand(), true));

    // now you can use $node without going insane about parsing
    var_dump($node->element_1);

    // go to next <product />
    $z->next('product');
}

Краткий обзор плюсов и минусов различных подходов:

Только XMLReader

  • Достоинства: быстро, использует мало памяти

  • Минусы: слишком сложно писать и отлаживать, требует большого количества пользовательского кода. ничего полезного. Код пользовательского пространства медленный и подвержен ошибкам. Кроме того, это оставляет вам больше строк кода для поддержки

XMLReader + SimpleXML

  • Плюсы: не t используют много памяти (только память, необходимая для обработки одного узла), а SimpleXML, как следует из названия, действительно прост в использовании.

  • Минусы: создание объекта SimpleXMLElement для каждого узла не очень быстрое. Вам действительно нужно протестировать его, чтобы понять, является ли это проблемой для вас. Однако даже скромная машина сможет обрабатывать тысячу узлов в секунду.

XMLReader + DOM

  • Плюсы: использует примерно столько же памяти, сколько SimpleXML, а XMLReader :: expand () является быстрее, чем создание нового SimpleXMLElement. Хотелось бы, чтобы можно было использовать simplexml_import_dom () , но, похоже, в этом случае он не работает

  • Минусы: работа с DOM утомляет. Это на полпути между XMLReader и SimpleXML. Не такой сложный и неудобный, как XMLReader, но на много световых лет от работы с SimpleXML.

Мой совет: напишите прототип с помощью SimpleXML, посмотрите, подойдет ли он вам. Если производительность превыше всего, попробуйте DOM. Держитесь как можно дальше от XMLReader. Помните, что чем больше кода вы напишите, тем выше вероятность появления ошибок или снижения производительности.

212
ответ дан 24 November 2019 в 11:47
поделиться

XMLReader хорошо документирован на сайте PHP . Это XML Pull Parser, что означает, что он используется для перебора узлов (или узлов DOM) данного XML-документа. Например, вы можете просмотреть весь предоставленный документ следующим образом:

2
ответ дан 24 November 2019 в 11:47
поделиться
Другие вопросы по тегам:

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