Foros del Web » Programando para Internet » PHP »

removeChild no elimina un nodo

Estas en el tema de removeChild no elimina un nodo en el foro de PHP en Foros del Web. Hola a todos, tengo un problema en el momento de eliminar nodos xml El xml es el siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código XML: Ver original <?xml ...
  #1 (permalink)  
Antiguo 17/01/2012, 08:48
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
removeChild no elimina un nodo

Hola a todos, tengo un problema en el momento de eliminar nodos xml
El xml es el siguiente:

Código XML:
Ver original
  1. <?xml version="1.0"?>
  2. <calculadora>
  3. <procedimiento manual="0002" codigo="010101" tipovalor="uvr" valor="70.00" liquidacion="0" tipo_procedimiento="1" sala="1" especialista="14305" anestesiologo="02101"
  4. evento="1" ayudante="" consecutivo="1" orden="1" total="334935">
  5. <nombre>PUNCION CISTERNAL VIA LATERAL</nombre>
  6. </procedimiento>
  7. <procedimiento manual="0002" codigo="530100" tipovalor="uvr" valor="70.00" liquidacion="0" tipo_procedimiento="9" sala="1" especialista="02102" anestesiologo="02101"
  8. evento="1" ayudante="" consecutivo="2" total="98700">
  9. <nombre>HERNIORRAFIA INGUINAL DIRECTA (84)</nombre>
  10. </procedimiento>
  11. <procedimiento manual="0002" codigo="530100" tipovalor="uvr" valor="70.00" liquidacion="0" tipo_procedimiento="9" sala="1" especialista="02102" anestesiologo="02101"
  12. evento="1" ayudante="" consecutivo="3" total="98700">
  13. <nombre>HERNIORRAFIA INGUINAL DIRECTA (84)</nombre>
  14. </procedimiento>
  15. <procedimiento manual="0002" codigo="530100" tipovalor="uvr" valor="70.00" liquidacion="0" tipo_procedimiento="9" sala="1" especialista="02102" anestesiologo="02101"
  16. evento="1" ayudante="" consecutivo="4" total="98700">
  17.  <nombre>HERNIORRAFIA INGUINAL DIRECTA (84)</nombre>
  18.  </procedimiento>
  19.  <procedimiento manual="0002" codigo="530100" tipovalor="uvr" valor="70.00" liquidacion="0" tipo_procedimiento="9" sala="1" especialista="02102" anestesiologo="02101"
  20. evento="1" ayudante="" consecutivo="5" total="98700">
  21.  <nombre>HERNIORRAFIA INGUINAL DIRECTA (84)</nombre>
  22.  </procedimiento>
  23.  </calculadora>

o en el enlace : http://dl.dropbox.com/u/9463718/calc...1110490997.xml

El problema radica en que yo debo eliminar los 4 ultimos nodos (consecutivo 2 a 5)
Porque son elementos repetidos en dos atributos
Yo envio el nodo a eliminar y posteriormente consulto si existen elementos con codigo y evento igual asi:

Código PHP:
Ver original
  1. <?php
  2. $archivo=$_POST['archivo']; // archivo xml
  3. $codigo=$_POST['codigo']; //atributo codigo
  4. $evento=$_POST['evento']; // atributo evento
  5. $id=$_POST['fila']; //id fila para eliminar nodo
  6. $doc = new DOMDocument;
  7. $doc->load($archivo);
  8. $x = $doc->documentElement;
  9. //elimino el nodo seleccionado
  10. $y = $x->getElementsByTagName('procedimiento')->item($id);
  11. $oldy = $x->removeChild($y);
  12. $doc->save($archivo);
  13.  
  14. //ahora leo el xml para comparar si hay elementos con el mismo codigo
  15. $xml = new SimpleXMLElement($archivo, null, true);
  16. $fil="";
  17. $i=0;
  18. $c=0;
  19.   foreach( $xml->procedimiento as $procedimientos )
  20.   {
  21.            $even=$procedimientos['evento'];
  22.            $cod=$procedimientos['codigo'];  
  23.            if((trim($even)==trim($evento)) and (trim($codigo)==trim($cod)))
  24.            {
  25.            $fil=$fil."@".$i;
  26.            $c=1;
  27.            }
  28.           $i++;
  29.    }
  30.  
  31.    if($c==1)
  32.          {
  33.              $fil = substr ($fil, 1);
  34.              echo $fil."</br>"; //me muestra el id de las filas que son iguales en el atributo codigo y evento y que se deben eliminar
  35.               $fil =explode("@", $fil);
  36.                $l=0;
  37.             while($l<count($fil))
  38.             {
  39.                
  40.                $fila=$fil[$l];
  41.                $y = $x->getElementsByTagName('procedimiento')->item($fila);
  42.                $oldy = $x->removeChild($y);
  43.              
  44.                 $l++;
  45.             }
  46.  
  47.              $doc->save($archivo);
  48.  
  49.  
  50.          }
  51. ?>

Lo mas raro es que me muestra las filas que tiene que eliminar, pero nunca elimina la segunda, por ejemplo si mando a eliminar el consecutivo 5, no elimina el consecutivo 3, pero los otros si...y el id de esa fila si aparece entre el ciclo while....Cual podria ser el problema?...Agradezco me puedan ayudar...muchas gracias...........

Etiquetas: nodo, removechild
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 00:10.