我必须分析大的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;
提前致谢!
答案 0 :(得分:0)
我正在努力使用XMLReader,但这应该可行
if( ($reader->nodeType==XMLReader::ELEMENT) && ($reader->name === 'PRODUIT'))
{
if($reader->getAttribute('id') === 3){
//id is 3
}
}