Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/01/2011, 16:39
Avatar de heberto
heberto
 
Fecha de Ingreso: septiembre-2004
Ubicación: Morelia, Michoacán
Mensajes: 104
Antigüedad: 20 años, 3 meses
Puntos: 0
Pregunta Cerrar nodos de un XML con PHP y MySQL

Saludos a todos!

Estoy desarrollando un pequeño sistema de inventarios en Flex, PHP y MySQ en el cual tengo en mi base de datos una tabla con las categorias de los articulos registrados en dicho inventario. En la misma tabla tengo la relacion de las subcategorias de cada categoria. He desarrollado un script de PHP el cual me debe de generar un XML con las categorias registradas en el sistema. Dicho XML será leido por Flex y desplegarlo en un componente Tree. Basicamente el problema lo tengo al momento de querer cerrar los nodos del XML en mi script de PHP alguien me puede ayudar en esto por favor? ya le di muchas vueltas y me he ciclado y no saco una solución. De antemano muchas gracias por su atención. Anexo el codigo y estructura de la BD

Tabla en mi base de datos...
Código:
CREATE TABLE `Categorias` (
  `IdCategoria` double NOT NULL AUTO_INCREMENT,
  `IdCatPadre` double NOT NULL,
  `Categoria` varchar(100) NOT NULL,
  PRIMARY KEY (`IdCategoria`)
)
El código de mi archivo PHP. La conexion con la BD la hago en el archivo conexion.php
En este codigo solo consulto 3 niveles de profundidad. ¿Es posible hacer la busqueda de forma dinamica?

Código PHP:
<?php require_once('../Connections/conexion.php'); ?>
 
<?php 
   $nivel_max 
3
   
$campos ""
   for(
$i=0;$i<$nivel_max;$i++){ 
      
$campos.= "t$i.IdCategoria AS IdCatNivel$i,t$i.categoria AS CatNivel$i,t$i.IdCatPadre AS IdPadreNivel$i"
      if(
$i!=$nivel_max-1){ 
         
$campos.= ","
      } 
   } 
    
   
$sql "SELECT $campos "
   
$sql .= "FROM Categorias AS t0 "
   for(
$i=1;$i<$nivel_max;$i++){ 
      
$sql .= "LEFT JOIN Categorias AS t$i ON t$i.IdCatPadre = t".($i-1).".IdCategoria "
   } 
   
$sql .= "WHERE t0.IdCatPadre =  '0'"
 
   
mysql_select_db($database_conexion$conexion); 
   
$query_rsCategorias $sql
   
$rsCategorias mysql_query($query_rsCategorias$conexion) or die(mysql_error()); 
   
$row_rsCategorias mysql_fetch_assoc($rsCategorias); 
   
$totalRows_rsCategorias mysql_num_rows($rsCategorias); 
    
   
$xml ""
   
$error 0
    
   
$temp = array(); 
   for(
$i=0;$i<$nivel_max;$i++){ 
      
$temp[$i] = ""
      
$cierre[$i] = true
   } 
    
   if(
$totalRows_rsCategorias 0){ 
       
      do{ 
         for(
$i=0;$i<$nivel_max;$i++){ 
            
$item $row_rsCategorias['CatNivel'.$i]; 
            
$sangria ""
            for(
$j=0;$j<$i;$j++){ 
               
$sangria.= "\t";  
            } 
             
            if(
$item != ""){ 
               if(
$temp[$i] != $item){ 
                  
$temp[$i] = $item
                  
$xml.= "\n".$sangria."<item label=\"".$temp[$i]."\">"
                  if(
$i == ($nivel_max-1)){ 
                     
$xml.= "</item>"
                  }else{ 
                      
                  } 
               }else{ 
                   
               } 
            }else{ 
               
$xml.= "</item>"
               break; 
            } 
             
         }    
      }while(
$row_rsCategorias mysql_fetch_assoc($rsCategorias)); 
   }else{ 
      
$error 1
   } 
    
   
header("Content-type: text/xml"); 
   echo 
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"
   echo 
$xml
?>
y este es el resultado que me genera....
Código:
<?xml version="1.0" encoding="iso-8859-1"?>  
<item label="Ropa">  
   <item label="Tops">  
      <item label="Blusas"></item>  
      <item label="Playeras"></item>  
      <item label="Chaleco"></item>  
   <item label="Faldas">  
      <item label="Faldas cortas"></item>  
      <item label="Faldas largas"></item>  
   <item label="Vestidos">  
      <item label="Cocktail"></item>  
      <item label="Casual"></item>  
   <item label="Pantalones y Shorts">  
      <item label="Pesquero"></item>  
      <item label="Jeans"></item>  
   <item label="Chamarras y abrigos">  
      <item label="Saco"></item>  
      <item label="Blazer"></item>  
<item label="Zapatos">  
   <item label="Botas"></item>  
   <item label="Tacones"></item>  
   <item label="Sandalias"></item>  
   <item label="Plataformas"></item>  
   <item label="Suecos"></item>  
   <item label="Flats"></item>  
<item label="Accesorios">  
   <item label="Cabello"></item>  
   <item label="Aretes"></item>  
   <item label="Collares"></item>  
   <item label="Cinturón"></item>  
   <item label="Pulseras"></item>  
   <item label="Anillos"></item>  
<item label="Bolsas"></item>  
<item label="Productos únicos"></item>  
<item label="Arte">  
   <item label="Pinturas"></item>  
   <item label="Esculturas"></item>  
   <item label="Fotografía"></item>
__________________
Atte.

Ing. Julio Heberto Gonzalez Morales
Certified Macromedia Flash MX Designer