Mas o menos he empezado a experimentar con XML y PHP porque tengo algo entre manos (una chorradilla), he creado mi propia clase para parsear el archivo y va de lujo, me lo analiza muy rapido teniendo en cuenta todas las movidas que le he metido a la clase.El problema esta en que esa misma clase no me sirve cuando quiero obtener solo los primeros datos del archivo XML, tarda mas de la cuenta para algo tan sencillo, asi que empeze a trastear con php y he sacado dos funciones, una buena y otra chapucilla por decirlo de alguna forma.
Nota: El tiempo es aproximado y es calculado cuando finaliza la lectura de 10 archivos XML que pesan cada uno 6k (mas o menos 6 lorem imposium y algunas cosillas mas).
La primera funcion usa SAX y el tiempo de procesado para coger el title y la categoria es de 0’046 segundos.
function uno()
{
$id = fopen("xml.xml","r");
$simple = fread($id,filesize("xml.xml"));
fclose($id);
$p = xml_parser_create();
xml_parse_into_struct($p,$simple,$vals,$index);
xml_parser_free($p);
echo $vals [2]['value'] .
$vals [0]['attributes']['CATEGORIA'];
}
La segunda funcion es mas o menos un apaño sin usar SAX y el tiempo es inferior, 0’0042 segundos.
function dos()
{
$id = fopen("xml.xml","r");
$simple = fread($id,filesize("xml.xml"));
fclose($id);
preg_match('!<title>(.+)</title>!',$simple,$n);
preg_match('!categoria="(.+)"s!',$simple,$c);
echo $n [1] .$c [1];
}
La verdad es que ambos me lo procesan muy rapido pero teniendo en cuenta que si quiero añadir plantillas y algunas movidas mas la cosa ya cambia.He pensado en usar la primera pero disminuyendo el tamaño de lectura, en vez de todo el documento solo 200bytes, que es lo suficiente para que me lea esos datos.
El resultado al variar la linea es de 0’006 , nada mal no?.
$simple = fread($id,200);
Puede que sea un poquito obsesivo con el tiempo pero prefiero que la carga de los archivos xml sea la menor posible para poder aprovechar el tiempo en realizar otras funciones (como crear un menu dinamico).
Por cierto maginifica la funcion xml_parse_into_struct gracias david ;P.