Foros del Web » Programando para Internet » PHP »

Cambiar contenido de nodos xml en php

Estas en el tema de Cambiar contenido de nodos xml en php en el foro de PHP en Foros del Web. Buenos días, Ante todo decir que soy novato en php, y espero con vuestra ayuda resolver el problema que me ha surgido. Estoy tratando de ...
  #1 (permalink)  
Antiguo 20/05/2015, 05:06
 
Fecha de Ingreso: mayo-2015
Mensajes: 1
Antigüedad: 8 años, 10 meses
Puntos: 0
Cambiar contenido de nodos xml en php

Buenos días,

Ante todo decir que soy novato en php, y espero con vuestra ayuda resolver el problema que me ha surgido.

Estoy tratando de realizar un pequeño programa en php que me sustituya el contenido de un nodo por otro en un xml.

Lo realizo con dom , el xml contiene 56.823 lineas y me muestra el error :

Fatal error: Maximum execution time of 1200 seconds exceeded in C:\xampp\htdocs\html\cambiocodigo.php on line 288

y solo cambia unas cuantas lineas.

El fichero contiene muchas lineas? o es la forma incorrecta de realizarlo?


Esto es un pequeño fragmento del php.

Código PHP:
<?php
set_time_limit
(1200);

$xml = new DOMDocument();
$fichero="fic.xml";

$xml->load($fichero);


$elementos=$xml->getElementsByTagName('Sector');


for (
$i=0$i<$elementos->length$i++) { 

      
$sectorviejo=$elementos->item($i)->nodeValue;

switch (
$sectorviejo) {

    case 
'Hombre > ABRIGO'
         
$nsector='341101';
         
codigoabrigou($nsector,$fichero);
        
        break;

    default:
        echo 
"<font color='red'>El sector ".$sectorviejo." no encuentra codigo a sustituir </font>";
        echo 
"<br>";
        break;
}
      
}


function 
codigoabrigou($sectornuevo,$fic){
$xml = new DOMDocument();
$fichero=$fic;
$xml->load($fichero);


$elementos=$xml->getElementsByTagName('Product');

foreach (
$elementos as $producto) {


    for (
$i=0$i <$elementos->length $i++) { 
         
$sector=$producto->getElementsByTagName("Sector")->item(0)->nodeValue;
         
$sviejo=$producto->getElementsByTagName("Sector")->item(0);
    }
    if(
$sector==="Hombre > ABRIGO"){
         
$cdata=$xml->createCDATASection($sectornuevo);
          
$sviejo->childNodes->item($i);
         
$sviejo->replaceChild($cdata,$sviejo->childNodes->item(0));
         
$xml->save($fichero);
         echo 
"se ha cambiado el sector ".$sector." por ".$sectornuevo;
         echo 
"<br>";
    }
    
}
   
 }


?>
El contenido del xml seria el siguiente.
Código:
<?xml version="1.0" ?>
<Sincro_details>
  <Products>
	<Product>
		<Product_id><![CDATA[2583]]></Product_id>
		<Title><![CDATA[producto prueba]]></Title>
		<Description><![CDATA[2014-2015]]></Description>
		<Price><![CDATA[20]]></Price>
		<Photos>
		<Photo><![CDATA[http://ruta/fotos/14201511471155383).jpg]]></Photo>
		<Photo><![CDATA[http://ruta/fotos/1832015192504122082.jpg]]></Photo>
		<Photo><![CDATA[http://ruta/1832015192504118464.jpg]]></Photo>
		<Photo><![CDATA[http://ruta/fotos/1832015192505647103.jpg]]></Photo>
		<Photo><![CDATA[]]></Photo>
		</Photos>
		<Keywords>
		<Keyword><![CDATA[]]></Keyword>
		<Keyword><![CDATA[]]></Keyword>
               <Keyword><![CDATA[]]></Keyword>
               <Keyword><![CDATA[]]></Keyword>
               <Keyword><![CDATA[]]></Keyword>
               </Keywords>
		
		<Unit_stock><![CDATA[1]]></Unit_stock>
		<Sector><![CDATA[341101]]></Sector>
</Product>
</Products>

Última edición por lscortez0; 20/05/2015 a las 08:30

Etiquetas: dom, domdocument, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:22.