Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/06/2007, 13:38
daenor
 
Fecha de Ingreso: diciembre-2004
Mensajes: 197
Antigüedad: 19 años, 4 meses
Puntos: 1
XML ==> varias variables PHP repetidas ==> MySQL

Muy buenas!!!
Queria consultarles. Hace unos cuantos días estoy intentando desarrollar esto, pero no logro encontrar la solución. Trabajo con PHP4. Estoy empezando con XML.

Tengo un XML con este formato:

archivo.xml
Código PHP:
<?xml version "1.0" encoding="Windows-1252" standalone="yes"?>
<VFPData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="cabezal.xsd">
    <datos>
        <demo1>140</demo1>
        <demo2>O</demo2>
        <demo3>2006-12-27T11:04:19</demo3>
    </datos>
    <datos>
        <demo1>141</demo1>
        <demo2>O</demo2>
        <demo3>2006-12-27T16:19:52</demo3>
    </datos>
    <datos>
        <demo1>142</demo1>
        <demo2>V</demo2>
        <demo3>2006-12-29T16:15:52</demo3>
    </datos>
</VFPData>
Lo que estoy intentando hacer es que un PHP les cada uno de los tags "datos" y por cada uno de estos, haga un insert en la base de datos.
he logrado que lo haga por solo uno de ellos, pero no para todos.
El problema me surge que me está tomando las etiquetas "VFPData" y "datos" como campos, y eso me trae problemas.

Hay alguna manera de que solo tome los datos de las etiquetas interiores (las "demoX")?

es decir, algo como "por cada etiqueta datos, toma las etiquetas interiores e insertalas en la base de datos".

He leido las bolbiotecas de PHP, utilizando algunos de estos ejemplos, pero no doy con la respuestas.
( http://ar2.php.net/manual/es/ref.xml.php )

Lo levanto con este php:

Código PHP:
$file "archivo.xml";
$feed = array();
$key "";
$info "";

function 
startElement($xml_parser,  $attrs ) {
  global 
$feed;
   }

function 
endElement($xml_parser$name) {
  global 
$feed,  $info;
   
$key $name;
  
$feed[$key] = $info;
  
$info ""; }

function 
charData($xml_parser$data ) {
  global 
$info;
  
$info .= $data; }

$xml_parser xml_parser_create();
xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"charData" );
$fp fopen($file"r");
while (
$data fread($fp8192))
!
xml_parse($xml_parser$datafeof($fp));
xml_parser_free($xml_parser);

$orden_tabla "ordentabla";

$sql"INSERT INTO $orden_tabla ( `";
$j=0;
$i=count($feed);
foreach( 
$feed as $assoc_index => $value )
  {
  
$j++;
  
$sql.= strtolower($assoc_index);
  if(
$i>$j$sql.= "` , `";
  if(
$i<=$j) {$sql.= "` ) VALUES ('";}
  }
 
$h=0;
foreach( 
$feed as $assoc_index => $value )
  {
  
$h++;
  
$sql.= utf8_decode(trim(addslashes($value)));
  if(
$i-1>$h$sql.= "', '";
  if(
$i<=$h$sql.= "','')";
  }
  
$sql=trim($sql);
  echo 
$sql
Otra opcioón seria que por tada una de las etiquetas internas de "datos", me ceee una variable con el valor de la etiqueta, y que valla loopeando por cada etiqueta "datos".
Pero bueno eso tampoco lo logré :(

Saludos!
Miles de gracias!! Espero que esta duda sirva de algo a la comunidad :)
__________________
Diseñador y Desarrolador en Proyecto81 WebStudio