Foros del Web » Programando para Internet » PHP »

$xml->saveXML(); no guarda

Estas en el tema de $xml->saveXML(); no guarda en el foro de PHP en Foros del Web. Hola estoy tratando de guardar en una variable todo lo almacenado en el arbol xml en una variable para luego imprimirla invocando la funcion, pero ...
  #1 (permalink)  
Antiguo 07/12/2008, 14:41
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 1 mes
Puntos: 10
$xml->saveXML(); no guarda

Hola

estoy tratando de guardar en una variable todo lo almacenado en el arbol xml en una variable para luego imprimirla invocando la funcion, pero no lo guarda en la variable, que sera el problema?

Código PHP:
function satxmlsv2($arr, $edidata=false, $dir="./tmp/",$nodo="",$esquemas=true) {
// {{{  Parametros generales
global $xml, $cadena_original, $conn;
error_reporting(E_ALL);
$cadena_original='||';
$noatt=  array();
$nufa = $arr['serie'].$arr['folio'];    // Junta el numero de factura   serie + folio
// }}}
// {{{  Datos generales del Comprobante
$xml = new DOMdocument("1.0","UTF-8");
$root = $xml->createElement("Comprobante");
$root = $xml->appendChild($root);
if ($esquemas==true) {
    # 7/Dic/2006  porque los necios de Levicom (para chedraui) no quieren estos elmentos, dicen
    #             que su validador lo agrega
    cargaAtt($root, array("xmlns"=>"http://www.sat.gob.mx/cfd/2",
                          "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
                          "xsi:schemaLocation"=>"http://www.sat.gob.mx/cfd/2  http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd"
                         )
                );
}
 
cargaAtt($root, array("version"=>"2.0",
                      "serie"=>"A",
                      "folio"=>"001",
                      "fecha"=>xml_fech($arr['fecha']),
                      "sello"=>"aaa010101aaa_CSD_09",
                      "noAprobacion"=>$arr['noAprobacion'],
                      "anoAprobacion"=>$arr['anoAprobacion'],
                      "tipoDeComprobante"=>$arr['tipoDeComprobante'],
                      "formaDePago"=>$arr['formaDePago'],
                      "noCertificado"=>$arr['noCertificado'],
                      "certificado"=>"aaa010101aaa_CSD_09",
                      "subTotal"=>$arr['subTotal'],
                      "total"=>$arr['total']
                   )
                );
// }}}
// {{{ Datos del Emisor
$emisor = $xml->createElement("Emisor");
$emisor = $root->appendChild($emisor);
cargaAtt($emisor, array("rfc"=>$arr['Emisor']['rfc'],
                       "nombre"=>$arr['Emisor']['nombre']
                   )
                );
$domfis = $xml->createElement("DomicilioFiscal");
$domfis = $emisor->appendChild($domfis);
cargaAtt($domfis, array("calle"=>"CARLOS B. ZETINA",
                        "noExterior"=>"80",
                        "noInterior"=>"",
                        "colonia"=>"INDUSTRIAL XALOSTOC",
                        "localidad"=>"ECATEPEC DE MORELOS",
                        "municipio"=>"ECATEPEC",
                        "estado"=>"MEXICO",
                        "pais"=>"MEXICO",
                        "codigoPostal"=>"55348"
                   )
                );
$expedido = $xml->createElement("ExpedidoEn");
$expedido = $emisor->appendChild($expedido);
cargaAtt($expedido, array("calle"=>$arr['Emisor']['ExpedidoEn']['calle'],
                        "noExterior"=>$arr['Emisor']['ExpedidoEn']['noExterior'],
                        "noInterior"=>$arr['Emisor']['ExpedidoEn']['noInterior'],
                        "localidad"=>$arr['Emisor']['ExpedidoEn']['localidad'],
                        "municipio"=>$arr['Emisor']['ExpedidoEn']['municipio'],
                        "estado"=>$arr['Emisor']['ExpedidoEn']['estado'],
                        "pais"=>$arr['Emisor']['ExpedidoEn']['pais'],
                        "codigoPostal"=>$arr['Emisor']['ExpedidoEn']['codigoPostal']
                   )
                );
// }}}
// {{{ Datos del Receptor
$receptor = $xml->createElement("Receptor");
$receptor = $root->appendChild($receptor);
cargaAtt($receptor, array("rfc"=>$arr['Receptor']['rfc'],
                          "nombre"=>$arr['Receptor']['nombre']
                      )
                  );
$domicilio = $xml->createElement("Domicilio");
$domicilio = $receptor->appendChild($domicilio);
cargaAtt($domicilio, array("calle"=>$arr['Receptor']['Domicilio']['calle'],
                        "noExterior"=>$arr['Receptor']['Domicilio']['noExterior'],
                        "noInterior"=>$arr['Receptor']['Domicilio']['noInterior'],
                       "colonia"=>$arr['Receptor']['Domicilio']['colonia'],
                       "localidad"=>$arr['Receptor']['Domicilio']['localidad'],
                       "municipio"=>$arr['Receptor']['Domicilio']['municipio'],
                       "estado"=>$arr['Receptor']['Domicilio']['estado'],
                       "pais"=>$arr['Receptor']['Domicilio']['pais'],
                       "codigoPostal"=>$arr['Receptor']['Domicilio']['codigoPostal'],
                   )
               );
// }}}
// {{{ Detalle de los conceptos/produtos de la factura
$conceptos = $xml->createElement("Conceptos");
$conceptos = $root->appendChild($conceptos);
for ($i=1; $i<=sizeof($arr['Conceptos']); $i++) {
    $concepto = $xml->createElement("Concepto");
    $concepto = $conceptos->appendChild($concepto);
    cargaAtt($concepto, array("cantidad"=>$arr['Conceptos'][$i]['cantidad'],
                              "descripcion"=>$arr['Conceptos'][$i]['descripcion'],
                              "valorUnitario"=>round($arr['Conceptos'][$i]['valorUnitario'],2),
                              "importe"=>$arr['Conceptos'][$i]['importe'],
                   )
                );
}
// }}}
// {{{ Impuesto (IVA)
$impuestos = $xml->createElement("Impuestos");
$impuestos = $root->appendChild($impuestos);
# 7/ago/2006  Ojoj, no confundir tasa 0 con excento
if (isset($arr['Traslados']['importe'])) {
    $traslados = $xml->createElement("Traslados");
    $traslados = $impuestos->appendChild($traslados);
    $traslado = $xml->createElement("Traslado");
    $traslado = $traslados->appendChild($traslado);
    cargaAtt($traslado, array("impuesto"=>$arr['Traslados']['impuesto'],
                              "tasa"=>$arr['Traslados']['tasa'],
                              "importe"=>$arr['Traslados']['importe']
                             )
                         );
}
// }}}
// {{{ Calculo de sello
$cadena_original .= "|";                 // termina la cadena original con el doble ||
$certificado = $arr['noCertificado'];
$maquina = trim(`uname -n`);
$ruta = ($maquina == "www.augustino.net") ? "./" : "./";
$file=$ruta.$certificado."aaa010101aaa_CSD_09.key.pem";      // Ruta al archivo
 
 
$pkeyid = openssl_get_privatekey(file_get_contents($file));
openssl_sign($cadena_original, $crypttext, $pkeyid, OPENSSL_ALGO_MD5);
openssl_free_key($pkeyid);
 
$sello = base64_encode($crypttext);             // lo codifica en formato base64
$root->setAttribute("sello",$sello);
 
$file=$ruta.$certificado."aaa010101aaa_CSD_09.cer.pem";      // Ruta al archivo
$datos = file($file);
$certificado = ""; $carga=false;
for ($i=0; $i<sizeof($datos); $i++) {
    if (strstr($datos[$i],"END CERTIFICATE")) $carga=false;
    if ($carga) $certificado .= trim($datos[$i]);
    if (strstr($datos[$i],"BEGIN CERTIFICATE")) $carga=true;
}
$root->setAttribute("certificado",$certificado);
// }}}
// {{{ Addenda si se requiere
if ($edidata) {
    $Addenda = $xml->createElement("Addenda");
    // $Addenda->setAttribute("xmlns:foo","http://www.amece.org.mx/cfd/documento");
    $Addenda = $root->appendChild($Addenda);
    if (substr($edidata,0,5) == "<?xml") {
        // Es XML por ejemplo Soriana
        $smp = simplexml_load_string($edidata);
        $Documento = dom_import_simplexml($smp);
        $Documento = $xml->importNode($Documento, true);
    } else {
        if ($nodo=="") {
            // Va el EDIDATA directo sin nodo adiconal. por ejemplo Corvi
            $Documento = $xml->createTextNode(utf8_encode($edidata));
        } else {
            // Va el EDIDATA dentro de un nodo. por ejemplo Walmart
            $Documento = $xml->createElement($nodo,utf8_encode($edidata));
        }
    }
    $Documento = $Addenda->appendChild($Documento);
}
// }}}
// {{{ Genera un archivo de texto con el mensaje XML + EDI  O lo guarda en cfdsello
    $xml->formatOutput = true;
$todo = $xml->saveXML();
/*
if ($dir != "
/dev/null") {
    $xml->formatOutput = true;
    $xml->saveXML();

*/
/*else {
    $conn->replace("
cfdsello",array("selldocu"=>$nufa),"selldocu",true);
    $where=" 
selldocu '$nufa'";
    $conn->UpdateBlob("
cfdsello","sellcade",$cadena_original,$where,'TEXT');
    $conn->UpdateBlob("
cfdsello","sellxml",$todo,$where,'TEXT');
    }*/
// }}}
return($todo);
}
// {{{ Funcion que carga los atributos a la etiqueta XML
function cargaAtt(&$nodo, $attr) {
// +-------------------------------------------------------------------------------+
// | Ademas le concatena a la variable global los valores para la cadena origianl  |
// +-------------------------------------------------------------------------------+
global $xml, $cadena_original;
$quitar = array('sello'=>1,'noCertificado'=>1,'certificado'=>1);
foreach ($attr as $key => $val) {
    $val = preg_replace('/\s\s+/', ' ', $val);   // Regla 5a y 5c
    $val = trim($val);                           // Regla 5b
    if (strlen($val)>0) {   // Regla 6
        $val = utf8_encode(str_replace("
|","/",$val)); // Regla 1
        $nodo->setAttribute($key,$val);
        if (!isset($quitar[$key])) 
            if (substr($key,0,3) != "
xml" &&
                substr($key,0,4) != "
xsi:")
             $cadena_original .= $val . "
|";
    }
}
}
// }}}
// {{{ Formateo de la fecha en el formato XML requerido (ISO)
function xml_fech($fech) {
    $ano = substr($fech,0,4);
    $mes = substr($fech,4,2);
    $dia = substr($fech,6,2);
    $hor = substr($fech,8,2);
    $min = substr($fech,10,2);
    $seg = substr($fech,12,2);
    $aux = $ano."
-".$mes."-".$dia."T".$hor.":".$min.":".$seg;
    return ($aux);
}
$resultado=satxmlsv2($arr, $edidata=false, $dir="
./tmp/",$nodo="",$esquemas=true);
echo $resultado;
Ya lo corregi gracias se soluciono poniendo asi

$todo = $xml->saveXML();
$xml->saveXML();

que loco no?, jejeje

Última edición por August; 07/12/2008 a las 14:52
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 18:33.