【发布时间】:2016-10-12 11:43:34
【问题描述】:
我正在尝试读取 Symfony 项目中的 XML 文件,以将数据发送到前端。
由于 XML 文件很大,我正在使用 XMLReader 和 SimpleXML 的组合(如此线程中所建议:How to use XMLReader in 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个结果。
有没有办法做到这一点?
【问题讨论】:
-
这并不是一个好主意,因为这基本上意味着您必须解析 xml 文件每次请求表中的新页面。相反,您可以处理整个文件并传输它,然后使用客户端逻辑进行分页(javascript)。这更容易且更具吸引力,但只能处理合理数量的数据。如果这不是一个选项,那么您应该将 xml 文件解析到数据库中并从那里传递分页数据。
-
arkascha 有一个观点,您可以在 javascript 中解析 XML 并使用 xpath 查询来选择获取页面所需的节点
标签: php symfony xmlreader symfony-http-foundation