我有一个用 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();
}