私は Symfony 1 で書かれたアプリケーションを持っています。毎日、システム管理者は新しいクライアントのリストを含む XML をアップロードします。
つい最近、クライアントに関する情報を含む多くのデータベース レコードが失われました。
幸いなことに、情報は (メイン データベース以外の) 別の場所に保存されていたため、すべてのクライアントに関するデータを含む XML を生成できました。
問題は、そのような XML が巨大 (約 25MB) であるだけでなく、多数のノードが繰り返されることです。
以前は毎日アップロードしていたため、はるかに小さなファイル (サイズが約 300kb) をアップロードするために使用されているため、このファイルをアップロードすると、PHP のデフォルトの 30 秒の実行時間を超えてスクリプトの実行が停止します。
この XML ファイルを処理し、PHP コードを使用してすべての重複ノードを削除する高速な方法があるかどうかを知りたいです。
XML の形式は次のとおりです。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Clientes>
<Cliente>
<clienteCodigo>1Z</clienteCodigo>
<nombreCliente>COMPANY NAME</nombreCliente>
<telefonoCliente>011-4444-4555</telefonoCliente>
</Cliente>
<Cliente>
<clienteCodigo>1Z</clienteCodigo>
<nombreCliente>COMPANY NAME</nombreCliente>
<telefonoCliente>011-4444-4555</telefonoCliente>
</Cliente>
<Cliente>
<clienteCodigo>2A</clienteCodigo>
<nombreCliente>COMPANY NAME 2</nombreCliente>
<telefonoCliente>011-8888-4646</telefonoCliente>
</Cliente>
<Cliente>
<clienteCodigo>2A</clienteCodigo>
<nombreCliente>COMPANY NAME 2</nombreCliente>
<telefonoCliente>011-8888-4646</telefonoCliente>
</Cliente>
</Clientes>
前もって感謝します。
編集:これは、現在要素をループしているコードです(私は書いていません)。
foreach($clientes->getElementsByTagName("Cliente") as $clienteElement)
{
$clienteNew = Doctrine::getTable('Cliente')->findOneByCliente_codigo($clienteElement->getElementsByTagName("clienteCodigo")->item(0)->nodeValue);
if (!$clienteNew)
{
$clienteNew = new Cliente();
$clienteNew->cliente_codigo = $clienteElement->getElementsByTagName("clienteCodigo")->item(0)->nodeValue;
}
$clienteNew->nombre = $clienteElement->getElementsByTagName("nombreCliente")->item(0)->nodeValue;
$clienteNew->telefono = $clienteElement->getElementsByTagName("telefonoCliente")->item(0)->nodeValue;
$clienteNew->save();
}