Quiero pedir su ayuda ya que no he podido dar con la solución. Les platico un poco la problemática: Tengo una interfaz donde cargo un archivo XML y lo valido, y después lo guardo en una tabla en una base de datos Firebird. Todo lo guarda correctamente menos el xml completo.
El problema es que no sé si no estoy leyendo correctamente el xml, porque puedo acceder correctamente a sus datos pero al insertar en la base de datos me deja vacío el campo, como si no existieran datos o no lo leyera correctamente.
Necesito ayudaaaaaa
Les comparto algo de mi código que estoy utilizando. Espero alguien pueda ayudarme u orientarme.
Saludos
Using perl Syntax Highlighting
- our ($SCHEMA, $XML_TEMP) = ('./cfdi.xsd', './temp.xml');
- sub guardar_xml{
- my ($self, $xml_fh) = @_; #recibo el xml del navegador
- my ($RFC, $schema, $xml_info, $xml) = ('ASSE8901T20'); #declaro variables que necesito y #asigno un valor al RFC
- my $xml_data = &$retrieveFile($xml_fh);
- my $fh = IO::File->new('temp.xml', '>');print $fh $xml_data if defined $fh;$fh->close;
- eval{$schema = XML::LibXML::Schema->new(location => $SCHEMA)};
- return 'Error al cargar SCHEMA XML: '.$@ if $@;
- eval {$schema->validate(XML::LibXML->new->parse_file($XML_TEMP))};
- return 'El documento XML no es válido: '.$@ if $@;
- eval {$xml_info = XML::Simple->new->XMLin($xml_data)};
- my $fecha = $xml_info->{fecha};
- $fecha =~ /^(\d{4})\-(\d{2})\-(\d{2})\w(\d{2})\:(\d{2})\:(\d{2})$/;
- my $fechaInfo = "$1$2$3$4$5$6";
- &$connect($self->db_file)->do("INSERT INTO CFDI_REPOSITORIO VALUES(GEN_ID(ID_CFDI,1), '$RFC', '$xml_info->{'cfdi:Emisor'}->{rfc}', '$xml_info->{serie}', $xml_info->{total}, '".$xml_data."', $fechaInfo)");
- }
- ###subrutinas
- {
- $retrieveFile = sub{
- my $fh = shift;
- if(defined $fh && ref $fh eq 'IO::Handle'){
- if($fh->opened){
- my ($bytes_total, $data) = (0);
- while((my $bytes_read = $fh->sysread($data, 1024, $bytes_total)) && $bytes_total <= $BYTES_MAX){
- $bytes_total += $bytes_read;
- }
- $fh->close;
- return $data;
- }else{
- return 'The IO::Handle is not opened'
- }
- }else{
- return 'IO::Handle expected'
- }
- };
- }
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4