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>
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($fp, 8192))
!xml_parse($xml_parser, $data, feof($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;
Pero bueno eso tampoco lo logré :(
Saludos!
Miles de gracias!! Espero que esta duda sirva de algo a la comunidad :)