Foros del Web » Programando para Internet » PHP »

Crear XML con MySQL/PHP

Estas en el tema de Crear XML con MySQL/PHP en el foro de PHP en Foros del Web. Buenas companeros, Tengo que crear un XML apartir de una consulta de MySQL ya se hace pero necesito que quede exactamente con este formato: [xml] ...
  #1 (permalink)  
Antiguo 01/04/2011, 23:32
Avatar de guidoms7  
Fecha de Ingreso: marzo-2011
Mensajes: 31
Antigüedad: 13 años, 8 meses
Puntos: 0
Crear XML con MySQL/PHP

Buenas companeros,

Tengo que crear un XML apartir de una consulta de MySQL ya se hace pero necesito que quede exactamente con este formato:
[xml]
<chart>

<chart_type>pie</chart_type>

<chart_data>
<row>
<null/>
<string>2007</string>
<string>2008</string>
<string>2009</string>
</row>
<row>
<string>Region A</string>
<number>10</number>
<number>30</number>
<number>63</number>
</row>
</chart_data>
</chart>
[/xml]

Basicamente asi es como estoy tratando de crearlo
Código PHP:
<?php
 
header
("Content-type: text/xml");
 
$host "Localhost"
$user "test"
$pass "xxx"
$database "test";
 
$enlace mysql_connect($host$user$pass) or die("Error MySQL."); 
mysql_select_db($database$enlace) or die("Error base de datos.");
 
$query "SELECT AGENTE, count(*) FROM clientes group by agente"
$resultado mysql_query($query$enlace) or die("Sin resultados.");

$salida_xml "<?xml version=\"1.0\"?>\n"

$salida_xml .= "<chart>\n";
$salida_xml .= "<chart_type>" 'pie' "</chart_type>\n";
    
$salida_xml .= "<chart_data>\n";
    for(
$x $x mysql_num_rows($resultado) ; $x++){

        
$fila mysql_fetch_assoc($resultado); 
        
$salida_xml .= "\t<row>\n"
        
$salida_xml .= "\t\t<agente>" $fila['AGENTE'] . "</agente>\n"
        
$salida_xml .= "\t\t<cantidad>" $fila['count(*)'] . "</cantidad>\n"
            
// Corregiendo caracteres incorrectos
            
$fila['texto'] = str_replace("&""&amp;"$fila['texto']); 
            
$fila['texto'] = str_replace("<""&lt;"$fila['texto']); 
            
$fila['texto'] = str_replace(">""&gt;"$fila['texto']); 
           
// $salida_xml .= "\t\t<texto>" . $fila['texto'] . "</texto>\n"; 
        
$salida_xml .= "\t</row>\n"
    }
//segundo for
    
$salida_xml .= "</chart_data>\n";


$salida_xml .= "</chart>";
 
echo 
$salida_xml;
 
?>
pero no me queda con el mismo formato, esto es lo que me tira
[xml]

This XML file does not appear to have any style information associated with it. The document tree is shown below.


<chart>
<chart_type>pie</chart_type>

<chart_data>
<row>

</row>

<row>
<agente>Danilo</agente>
<cantidad>8</cantidad>
</row>
<row>

</row>

<row>
<agente>Evelyn</agente>
<cantidad>5</cantidad>
</row>
<row>

</row>

<row>
<agente>Maribel</agente>
<cantidad>2</cantidad>
</row>
<row>

</row>

<row>
<agente>Nestor</agente>
<cantidad>11</cantidad>
</row>
<row>

</row>

<row>
<agente>Noemy</agente>
<cantidad>2</cantidad>
</row>
</chart_data>
</chart>
[/xml]

LA verdad es mi primera ves utilizando xml y no tengo ni la menor idea de como hacer que quede parecido ya que necesito que se "dibuje" una tabla con esta forma

Cantidad
Danilo 8
Evelyn 10
Marco 4


Alguien que me ayude por favoooooooooooooooooooooooor
__________________
Costa Rica WOW!!
  #2 (permalink)  
Antiguo 02/04/2011, 07:05
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Crear XML con MySQL/PHP

La forma más sencilla es usando SimpleXML para crearlo
Código PHP:
Ver original
  1. <?php
  2. $xml = new SimpleXMLElement("<foo></foo>");
  3. $xml->addChild('bar', 'bar');
  4. for($i=0; $i<20; $i++){
  5.     $baz = $xml->addChild('baz');
  6.     $baz->addChild('candy', 'candy_' . $i);
  7.     $baz->addChild('fruits', 'fruits_' . $i);
  8. }
  9. header('Content-Type: text/xml');
  10.  
  11. /**
  12.  * Para que se vea bien al mirar el código fuente
  13.  * pero si no te importa con tan solo colocar la siguiente línea
  14.  * echo $xml->asXML();
  15.  * es suficiente
  16.  */
  17. $outXML = $xml->asXML();
  18. $xml = new DOMDocument();
  19. $xml->preserveWhiteSpace = false;
  20. $xml->formatOutput = true;
  21. $xml->loadXML($outXML);
  22. echo $xml->saveXML();
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 02/04/2011, 22:48
Avatar de guidoms7  
Fecha de Ingreso: marzo-2011
Mensajes: 31
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Crear XML con MySQL/PHP

No se como lo puedo hacer? donde pongo la consulta o como lo hago?

Disculpa esq soy nuevo en esto
__________________
Costa Rica WOW!!
  #4 (permalink)  
Antiguo 02/04/2011, 23:15
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Crear XML con MySQL/PHP

Cuando vayas recorriendo la consulta, es decir en el foreach.
Código PHP:
Ver original
  1. <?php
  2. $xml = new SimpleXMLElement("<foo></foo>");
  3. $xml->addChild('bar', 'bar');
  4. foreach($consulta as $row){
  5.     $baz = $xml->addChild('baz');
  6.     $baz->addChild('candy', $row['columna1']);
  7.     $baz->addChild('fruits', $row['columna2']');
  8. }
  9. header('Content-Type: text/xml');
  10.  
  11. /**
  12. * Para que se vea bien al mirar el código fuente
  13. * pero si no te importa con tan solo colocar la siguiente línea
  14. * echo $xml->asXML();
  15. * es suficiente
  16. */
  17. $outXML = $xml->asXML();
  18. $xml = new DOMDocument();
  19. $xml->preserveWhiteSpace = false;
  20. $xml->formatOutput = true;
  21. $xml->loadXML($outXML);
  22. echo $xml->saveXML();
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 03/04/2011, 00:51
Avatar de guidoms7  
Fecha de Ingreso: marzo-2011
Mensajes: 31
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Crear XML con MySQL/PHP

Muchas muchas gracias por tu ayuda, ahi me puse a intentar un poco mas y ya casi lo logre.

basicamente como te habia comentado el fin tenia que ser este:
Código PHP:
<chart>

   <
chart_type>pie</chart_type>

   <
chart_data>
      <
row>
         <
null/>
         <
string>2007</string>
         <
string>2008</string>
         <
string>2009</string>
      </
row>
      <
row>
         <
string>Region A</string>
         <
number>10</number>
         <
number>30</number>
         <
number>63</number>
      </
row>
   </
chart_data>
</
chart
Actualmente tengo esto:

Código PHP:
<chart>
    <
chart_type>pie</chart_type>

    <
chart_data>
        <
row>
            <
null></null>
            <
agente>Danilo</agente>
            <
agente>Evelyn</agente>

            <
agente>Maribel</agente>
            <
agente>Nestor</agente>
            <
agente>Noemy</agente>
        </
row>
        <
row>
            <
rutas>rutas</rutas>
            <
cantidad></cantidad>

            <
cantidad></cantidad>
            <
cantidad></cantidad>
            <
cantidad></cantidad>
            <
cantidad></cantidad>
        </
row>
    </
chart_data>
</
chart
Con este codigo:

Código PHP:
<?php
 
header
("Content-type: text/xml");
 
$host "xxx"
$user "xxxx"
$pass "xxxx"
$database "xxxx";
 
$enlace mysql_connect($host$user$pass) or die("Error MySQL."); 
mysql_select_db($database$enlace) or die("Error base de datos.");
 
$query "SELECT AGENTE, count(*) FROM clientes WHERE PREVENTA LIKE 'Viernes' group by agente"
$resultado mysql_query($query$enlace) or die("Sin resultados.");

$salida_xml "<?xml version=\"1.0\"?>\n"

$salida_xml .= "<chart>\n";
$salida_xml .= "\t<chart_type>" 'pie' "</chart_type>\n\n";
$salida_xml .= "\t<chart_data>\n";
            
$salida_xml .= "\t\t<row>\n";
            
$salida_xml .= "\t\t\t<null>" $fila5['NULL']. "</null>\n";
            for(
$y $y mysql_num_rows($resultado) ; $y++){
                
$fila2 mysql_fetch_assoc($resultado);  
                
$salida_xml .= "\t\t\t<agente>" $fila2['AGENTE'] . "</agente>\n";
                }
//cierro for Y
            
$salida_xml .= "\t\t</row>\n";
            
$salida_xml .= "\t\t<row>\n";     
            
$salida_xml .= "\t\t\t<rutas>" 'rutas'"</rutas>\n";
            for(
$z $z mysql_num_rows($resultado) ; $z++){
                
$valor mysql_fetch_assoc($resultado); 
                
$salida_xml .= "\t\t\t<cantidad>" $valor['count(*)'] . "</cantidad>\n"
            }
//cierro for z
 
            
$salida_xml .= "\t\t</row>\n";
    
$salida_xml .= "\t</chart_data>\n";
    
$salida_xml .= "</chart>";
 
echo 
$salida_xml;
 
?>
El problema que tengo ahi es que no me esta imprimiendo las cantidades, de casualidad no sabes porque pueda ser? Le he dado vueltas y vueltas y no veo el error :(
__________________
Costa Rica WOW!!
  #6 (permalink)  
Antiguo 03/04/2011, 10:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Crear XML con MySQL/PHP

Deberías colocar una consulta que verifique si el valor está vacio o no, si está vacio no guarda, si no está vacio entonces imprime. Puedes usar el constructor empty.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: 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 14:09.