Foros del Web » Programando para Internet » PHP »

Borrar nodos vacios de XML con php!!

Estas en el tema de Borrar nodos vacios de XML con php!! en el foro de PHP en Foros del Web. Hola: Como se encuentran el día de hoy? Saben? ando con una duda. Bueno, lo que pasa es que quisiera saber cómo borrar nodos padre ...
  #1 (permalink)  
Antiguo 13/07/2008, 18:33
 
Fecha de Ingreso: septiembre-2007
Mensajes: 5
Antigüedad: 16 años, 7 meses
Puntos: 0
Exclamación Borrar nodos vacios de XML con php!!

Hola:
Como se encuentran el día de hoy?

Saben? ando con una duda.

Bueno, lo que pasa es que quisiera saber cómo borrar nodos padre que contengan nodos hijos vacios.

Por ejemplo:
Tengo el siguiente archivo XML de esta forma:

Código HTML:
<?xml version="1.0"?>
      <directorio xmlns="MiXml">

            <cliente>
                  <clave></clave>
                   <nombre>Andrés</nombre>
                   <edad>24</edad>
            </cliente>

            <cliente>
                  <clave>1212</clave>
                   <nombre>Anahí</nombre>
                   <edad>17</edad>
            </cliente>

            <cliente>
                  <clave></clave>
                   <nombre>Angélica</nombre>
                   <edad>25</edad>
            </cliente>

            <cliente>
                  <clave>2323</clave>
                   <nombre>Luis</nombre>
                   <edad>15</edad>
            </cliente>

      </directorio> 
Cómo se puede observar, Andrés y Angélica, no tienen clave, y quisiera saber si hay alguna otra forma de borrar los todo el conjunto de nodos hijos con todo y padre para en caso de contener nodos vacíos.

Por decir que me quedara el archivo así:

Código HTML:
<?xml version="1.0"?>
      <directorio xmlns="MiXml">

            <cliente>
                  <clave>1212</clave>
                   <nombre>Anahí</nombre>
                   <edad>17</edad>
            </cliente>

            <cliente>
                  <clave>2323</clave>
                   <nombre>Luis</nombre>
                   <edad>15</edad>
            </cliente>

      </directorio> 
Actualmente tengo este código en php5, pero por lo que veo tengo problemas en el código. No marca ningún error, pero no me modifica el archivo, lo deja igual.

Este es el código:

Código PHP:

<?php

   $xml 
= new DOMDocument();
   
$xml->load('RegistroClientes.xml');
   
$nodelist=$xml->getElementsByTagName('cliente'); 
   
$remove=null;
        
      for (
$i 0$i $nodelist->length$i++)
         {
           
$innernodelist=$nodelist->item($i)->childNodes;
            
        for (
$j 0$j $innernodelist->length$j++)
           {
        
             if (( (string) 
$innernodelist->item($j)->nodeName)==='clave' && ((string) $innernodelist->item($j)->nodeValue)==='')
               {
                     
$remove=$nodelist->item($i);
                     break 
2;                        
                    }
              }
         }


    

    if (
$remove!==null)
      {           
  
        
$remove->parentNode->removeChild($remove);
           
$xml->save('RegistroClientes.xml');
      }
?>
Espero y me puedan ayudar y/o explicar.
Gracias de antemano.
Que se la pasen de lo mejor.

Última edición por nancypaola_25; 13/07/2008 a las 19:12
  #2 (permalink)  
Antiguo 10/09/2008, 14:55
 
Fecha de Ingreso: septiembre-2008
Mensajes: 1
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Borrar nodos vacios de XML con php!!

Hola Nancy:

Buscando resolver como eliminar nodos de un xml con php, encontre tu ejemplo que me sirvio para llegar a la solucion de mi problema, previo encontrar la que te servira a ti (aunque supongo que dado el tiempo transcurrido ya la habras encontrado).

1º.- Te sugiero colocar el encoding en el archivo xml:

<?xml version="1.0" encoding="ISO-8859-1" ?>

2º.- La sentencia
$remove->parentNode->removeChild($remove);

debe ir dentro del if del segundo for en lugar del break2, ya que tal como esta solamente funciona para el primer nodo vacio que encuentra.

El script php queda asi:

<?php

$xml = new DOMDocument();
$xml->load('RegistroClientes.xml');
$nodelist=$xml->getElementsByTagName('cliente');
$remove=null;

for ($i = 0; $i < $nodelist->length; $i++)
{
$innernodelist=$nodelist->item($i)->childNodes;

for ($j = 0; $j < $innernodelist->length; $j++)
{

if (( (string) $innernodelist->item($j)->nodeName)==='clave' && ((string) $innernodelist->item($j)->nodeValue)==='')
{
$remove=$nodelist->item($i);
$remove->parentNode->removeChild($remove);
}
}
}

if ($remove!==null)
{
$xml->save('RegistroClientes.xml');
}
?>

Gracias a tu trabajo pude realizar el mio.

Hasta siempre.
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 23:55.