Я пытаюсь прочитать файл XML в проекте Symfony, чтобы отправить данные во внешний интерфейс.
Поскольку файл XML огромен, я использую комбинацию XMLReader и SimpleXML (как предлагается в этой теме: Как использовать XMLReader в PHP?).
Вот мой код для чтения XML:
class XMLReader {
private $xmlFile;
private $reader;
public function __construct($xmlFile = null)
{
$this->xmlFile = $xmlFile;
}public function initReader()
{
$this->reader = new \XMLReader();
$this->reader->open($this->xmlFile);
}
public function getData()
{
$products = array();
$index = 0;
while ($this->reader->read()) {
while ($this->reader->name === 'product') {
$node = new \SimpleXMLElement($this->reader->readOuterXML());
array_push($products, $node);
$index++;
if ($index < 20)
$this->reader->next();
else
break 2;
}
}
return $products;
}
Моя цель — отправлять данные понемногу, так как они будут отображаться в таблице с нумерацией страниц. Это означает, что в первый раз он отправит 20 результатов, а затем, когда мы нажмем страницу 2, он запросит следующие 20 результатов.
Есть способ сделать это?
В Symfony вы можете отправить ответ небольшими порциями, используя StreamedResponse
. Обычно он используется для отправки больших файлов, потому что он не требует загрузки всего файла в память, но также должен отвечать вашим потребностям.
Посмотрите, как это используется в документе: http://symfony.com/doc/current/components/http_foundation.html#streaming-a-response
Других решений пока нет …