Hola muchas gracias... apenas vi tu mensaje y me encontre con fgetcsv();
que lee cada row, y creo es mucho mas sencillo de usar...
modifique el codigo que tenia por este.
EDIT: Para quien necesite o le sirva.
Este codigo lee un archivo csv y cada row edita atributos especificos de una plantilla xml.
y guarda un xml por cada row.
Muchas gracias por la ayuda.
Código PHP:
<?php
function csv_in_array($csv,$xml ) {
$doc = new DOMDocument();
$xml2 = $xml;
$doc->load($xml2);
$xp = new DOMXPath($doc);
$row = 1;
$handle = fopen($csv, "r");
# Rows Counter
$csvxrow = file($csv);
$csvxrow[0] = chop($csvxrow[0]);
$anzdata = count($csvxrow);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
foreach($xp->query('/ROOT/HEADER/@KEY[. != ""]') as $attrib)
{
$attrib->nodeValue = $data[0];
}
foreach($xp->query('/ROOT/DATA/SAPMES/LOIPRO/E1FKOL/@AUFNR[. != ""]') as $attrib)
{
$attrib->nodeValue = $data[0];
}
foreach($xp->query('/ROOT/DATA/SAPMES/LOIPRO/E1FKOL/@MATNR[. != ""]') as $attrib)
{
$attrib->nodeValue = $data[1];
}
foreach($xp->query('/ROOT/DATA/SAPMES/LOIPRO/E1FKOL/@GAMNG[. != ""]') as $attrib)
{
$attrib->nodeValue = $data[2];
}
foreach($xp->query('/ROOT/DATA/SAPMES/LOIPRO/E1FKOL/@GSTRS[. != ""]') as $attrib)
{
$attrib->nodeValue = $data[3];
}
foreach($xp->query('/ROOT/DATA/SAPMES/LOIPRO/E1FKOL/@GLTRS[. != ""]') as $attrib)
{
$fecha = new DateTime($data[3]);
$fecha->add(new DateInterval('P1M'));
$attrib->nodeValue = $fecha->format('Y-m-d');
}
}
$name = $data[0] .'-'. $data[1];
$ruta = './XML/';
$doc->formatOutput = true;
echo $doc->saveXML();
$doc->save($ruta.date('Y-m-d').'-'.$name.'.xml');
}
fclose($handle);
echo $anzdata . " XML Creados";
return $data;
}
// --------------------------------------------------------------
?>
<?php
// ----- call ------
$csvdata = csv_in_array("LISTOTA.csv", "A2CBOT.xml");
// -----------------
?>
EDIT: Terminado y Funcionando.
Ya lo unico que me falta es crear un xml por cada row.
muchas gracias por la ayuda y saludos.