Foros del Web » Programación para mayores de 30 ;) » Programación General »

Cantidad de registros en XML

Estas en el tema de Cantidad de registros en XML en el foro de Programación General en Foros del Web. hola gente tengo un xml de la siguente estructura Código: <?xml version="1.0" encoding="UTF-8" ?> <data> <row id="1"> <statsdate>2005-08-13</statsdate> <casino>tropez</casino> <profileid>ctdefault</profileid> <bannerid>ctdefault</bannerid> <source>-</source> <realimps>0</realimps> <realclicks>1</realclicks> <realdownloads>0</realdownloads> ...
  #1 (permalink)  
Antiguo 30/11/2005, 00:19
 
Fecha de Ingreso: marzo-2004
Mensajes: 44
Antigüedad: 20 años, 8 meses
Puntos: 0
Cantidad de registros en XML

hola gente

tengo un xml de la siguente estructura

Código:
  <?xml version="1.0" encoding="UTF-8" ?> 
<data>
 <row id="1">
  <statsdate>2005-08-13</statsdate> 
  <casino>tropez</casino> 
  <profileid>ctdefault</profileid> 
  <bannerid>ctdefault</bannerid> 
  <source>-</source> 
  <realimps>0</realimps> 
  <realclicks>1</realclicks> 
  <realdownloads>0</realdownloads> 
  <realplayers>0</realplayers> 
  <realfdcount>0</realfdcount> 
  <pokerrealfdcount>0</pokerrealfdcount> 
  </row>
  </data>

ese <row id="1"> va subiendo a medida q mas registro hay, autoincremental..


yo para ver ese XML en un site, lo parseo con este codigo

Código PHP:
$a file("URL DEL XML"); 
$b implode(""$a); 

$xml xml_parser_create(); 
xml_parser_set_option($xmlXML_OPTION_CASE_FOLDINGfalse); 
xml_parse_into_struct($xml$b$v); 
xml_parser_free($xml); 
echo 
count($v);

for(
$i=0$i<count($v); $i++){ 
  

   if(
$v[$i][tag] == "statsdate"){ 
       echo 
$v[$i][value]; 
   }
   if(
$v[$i][tag] == "casino"){
       echo 
$v[$i][value]; 
   }
   if(
$v[$i][tag] == "realclicks"){
       echo 
$v[$i][value]; 
   }
   if(
$v[$i][tag] == "fdcount"){
       echo 
$v[$i][value]; 
  }



mi problema es que yo necesito saber CUANTOS rows hay.. y el count($v) no me da ese numero... supongo que porque es un array de mas de una dimension...

se me quemaron los libros



gracias x leer :)
  #2 (permalink)  
Antiguo 30/11/2005, 06:14
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
¿No sería ... count($v["row"]); ... el que te devolvería el número total de etiquetas con nombre "row"?

Un beso
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #3 (permalink)  
Antiguo 30/11/2005, 08:21
 
Fecha de Ingreso: marzo-2004
Mensajes: 44
Antigüedad: 20 años, 8 meses
Puntos: 0
no!, da 0 eso.. :(
  #4 (permalink)  
Antiguo 30/11/2005, 11:00
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
Esto sí

Código:
$a = file("archivo.xml");
$b = implode("", $a);

$xml = xml_parser_create();
xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, false);
xml_parse_into_struct($xml, $b, $v);
xml_parser_free($xml);
//print_r($v);
$j=0;
for($i=0; $i<count($v); $i++){
     
if($v[$i][tag] == "row" && $v[$i][attributes][id]){
       $j++;
   }
   if($v[$i][tag] == "statsdate"){
       echo $v[$i][value]."<br>";
   }
   if($v[$i][tag] == "casino"){
       echo $v[$i][value]."<br>";
   }
   if($v[$i][tag] == "realclicks"){
       echo $v[$i][value]."<br>";
   }
   if($v[$i][tag] == "fdcount"){
       echo $v[$i][value]."<br>";
  }
} 
echo "TOTAL: ".$j;
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #5 (permalink)  
Antiguo 30/11/2005, 11:27
 
Fecha de Ingreso: marzo-2004
Mensajes: 44
Antigüedad: 20 años, 8 meses
Puntos: 0
y si yo quiero agregar cada registro en una base de datos?
  #6 (permalink)  
Antiguo 30/11/2005, 12:26
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
Pides mucho.... :P

De todas maneras eso que pides ahora es mas de PHP que de XML. Ya sabes como leer los valores de cada etiqueta, ahora te queda con PHP, almacenarlo en una base de datos.

Los pasos básicos son:

1. Conectarse a la BD
2. Recorrer cada <row>
2.1. Ejecutar la consulta INSERT INTO por cada etiqueta <row>
3. Cerrar la BD

Puedes seguir los pasos de este pequeño tutorial: http://www.webestilo.com/php/php07b.phtml
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #7 (permalink)  
Antiguo 30/11/2005, 12:32
 
Fecha de Ingreso: marzo-2004
Mensajes: 44
Antigüedad: 20 años, 8 meses
Puntos: 0
lo de insertar a base de datos lo se..
el problmea es recorrer cada <row>


voy a probar un par de cosas a ver que resulta


mil gracias helbira!!
  #8 (permalink)  
Antiguo 04/12/2005, 16:51
 
Fecha de Ingreso: marzo-2004
Mensajes: 44
Antigüedad: 20 años, 8 meses
Puntos: 0
me estoy volviendo loco

como recorro cada ROW???

el FOR que hace ahi no recorre cada uno sino que hace milquinientas instrucciones..

si quiero hacer un INSERT en la DB como lo tengo que hacer?



Código PHP:
for($i=0$i<count($v); $i++){
     
    if(
$v[$i][tag] == "row" && $v[$i][attributes][id]){
       
$j++;
       echo 
$j " > ";
       }
   if(
$v[$i][tag] == "statsdate"){ echo $v[$i][value]."-"$statsdate=$v[$i][value]; }
   if(
$v[$i][tag] == "casino"){ echo $v[$i][value]."-"$casino=$v[$i][value]; }
   if(
$v[$i][tag] == "realclicks"){ echo $v[$i][value]."-"; }
   if(
$v[$i][tag] == "fdcount"){ echo $v[$i][value]."-"; }
   
$sql="INSERT INTO stats (statsdate, casino) VALUES ('$statsdate', '$casino')";
    
mysql_query($sql) or errorsql($sql);


me inserta registros a lo loco...

como hago para insertar 1 registro completo del XML a la BD ?
  #9 (permalink)  
Antiguo 05/12/2005, 01:07
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 21 años, 6 meses
Puntos: 2
un detalle:

Código:
   if($v[$i][tag] == "statsdate"){ 
       echo $v[$i][value]; 
   } 
   if($v[$i][tag] == "casino"){ 
       echo $v[$i][value]; 
   } 
   if($v[$i][tag] == "realclicks"){ 
       echo $v[$i][value]; 
   } 
   if($v[$i][tag] == "fdcount"){ 
       echo $v[$i][value]; 
  }
Utiliza un switch() con sus respectivos case's, es mejor que if-else para esto...
__________________
I Love Programming...
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:01.