1
我必須分析大xml文件,大於2,1gb。PHP的Xmlreader movetoelement
我繼續使用Php,Xmlreader和自動化任務來每天進行更新。
我的服務器受到限制,自動化任務被限制爲一個小時。
在一小時內2,1gb是不可能的,我暫時不能更改我的服務器。
因此,我在我的數據庫中記錄了產品的最後一個編號,第二次更新,下一小時,我將最後一個編號記錄與xmlreader讀取的新記錄進行比較。如果數字相同,我繼續更新else(php失真),我移動到下一個節點,然後等待最後一個數字。
當第二次更新到達更新的節點的最後一個號碼時,是否有可能更快更簡單地進行更新?
實際的系統工作,但必須閱讀該文件,並花費時間來查找最後的產品編號保存。
我不會講英語很好,所以我希望你能理解。
XML文件的一部分:
我怎麼能去直接產品ID 3:
<?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的分析系統?
<?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();
}
?>
提前感謝!