使用PHP的Xmlreader movetoelement

时间:2013-10-18 14:45:51

标签: php xmlreader

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

我继续使用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?

<?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();
}

&GT;

提前致谢!

1 个答案:

答案 0 :(得分:0)

我正在努力使用XMLReader,但这应该可行

if( ($reader->nodeType==XMLReader::ELEMENT) && ($reader->name === 'PRODUIT'))
{
  if($reader->getAttribute('id') === 3){
    //id is 3
  }
}