Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/07/2008, 18:33
nancypaola_25
 
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