1

私は 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();                          
    }
4

1 に答える 1