1

我必须分析超过 2,1gb 的大 xml 文件。

我继续使用 Php、Xmlreader 和自动化任务来每天进行更新。

我的服务器受到限制,自动化任务被限制一个小时。

一小时内 2,1gb 是不可能的,我暂时无法更改我的服务器。

所以我在我的数据库中记录了产品的最后一个编号,然后在下一个小时进行第二次更新时,我将最后一个编号记录与 xmlreader 读取的新数据进行比较。如果数字相同,我将继续更新,否则(php 失真)我将移动到下一个节点并等待最后一个数字。

是否有可能在第二次更新时更快更轻松地更新到最后更新的节点编号?

实际系统工作但必须读取文件并花时间查找最后保存的产品编号。

我的英语说得不太好,所以我希望你能理解。

Xml 文件的一部分:

    <?xml version="1.0" encoding="utf-8"?>

<PRODUITS>

  <PRODUIT id="1">

    <CAPACITE>4</CAPACITE>

    <LOGEMENT><![CDATA[Résidence]]></LOGEMENT>

    <HEBERGEMENT><![CDATA[Studio 4 personnes]]></HEBERGEMENT>

    <REGION><![CDATA[Alpes du Nord]]></REGION>

    <PAYS><![CDATA[France]]></PAYS>

    <CODEPOSTAL>73500</CODEPOSTAL>
  </PRODUIT>

  <PRODUIT id="2">

    <CAPACITE>4</CAPACITE>

    <LOGEMENT><![CDATA[Résidence]]></LOGEMENT>

    <HEBERGEMENT><![CDATA[Studio 4 personnes]]></HEBERGEMENT>

    <REGION><![CDATA[Alpes du Nord]]></REGION>

    <PAYS><![CDATA[France]]></PAYS>

    <CODEPOSTAL>73500</CODEPOSTAL>
  </PRODUIT>

  <PRODUIT id="3">

    <CAPACITE>4</CAPACITE>

    <LOGEMENT><![CDATA[Résidence]]></LOGEMENT>

    <HEBERGEMENT><![CDATA[Studio 4 personnes]]></HEBERGEMENT>

    <REGION><![CDATA[Alpes du Nord]]></REGION>

    <PAYS><![CDATA[France]]></PAYS>

    <CODEPOSTAL>73500</CODEPOSTAL>
  </PRODUIT>
</PRODUITS>

我的 PHP 分析系统:

如何直接转到产品 ID 3?

<?php
if(file_exists("$file_xml"))
{
  $reader = new XMLReader();
  $reader->open("$file_xml");

  while($reader->read())
  {
    if( ($reader->name === 'PRODUIT') && ($reader->nodeType==XMLReader::ELEMENT) )
    {
    $node = new SimpleXMLElement($reader->readOuterXML());


    $id= mysql_real_escape_string(utf8_decode($node['id']));

          // For the next update but TAKE TIME !!
          if( ($num!="3") ) 
      {
      // Nothing to do
          }
      else
      { 
      $num = mysql_real_escape_string(utf8_decode($node['num']));
          ....                          
      }
    }
   }
$reader->close();
}

?>

提前致谢 !

4

1 回答 1

0

我正在为自己的 XMLReader 苦苦挣扎,但这应该可以

if( ($reader->nodeType==XMLReader::ELEMENT) && ($reader->name === 'PRODUIT'))
{
  if($reader->getAttribute('id') === 3){
    //id is 3
  }
}
于 2017-11-03T09:03:23.027 回答