• Publicidad

Pasar Tablas html a otros formatos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Notapor explorer » 2006-10-08 18:58 @832

Esta es una posible solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use HTML::TableExtract;
use XML::Simple;
use warnings;
use strict;

# Subrutinas
sub filtra ($) {
    $_ = shift;
    s/^\s*//;
    s/\s*$//;
    return $_;
}
sub campea ($) {
    $_ = shift;
    y/ \n/_/s;
    y/ÁÉÍÓÚáéíóúñüç/aeiouaeiounuc/;
    y/()//d;
    return lc $_;
}

# Leemos el HTML
my $html = do { undef $/; open HTML,"<datos.html"; <HTML> };

# Variables
my %xml;
my $te;
my $tabla;

# Análisis
$te = HTML::TableExtract->new( );
$te->parse($html);

# Datos PPI
$tabla = $te->table(2,2);
$xml{ ppi }{ numero    } = filtra $tabla->cell(0,0);
$xml{ ppi }{ condicion } = filtra $tabla->cell(0,1);

# Datos personales
$tabla = $te->table(3,2);
$xml{ personal }{ nombre       } = filtra $tabla->cell(0,0);
$xml{ personal }{ nacionalidad } = filtra $tabla->cell(0,1);
$xml{ personal }{ sexo         } = filtra $tabla->cell(0,2);

# Resto de datos
# Se encuentran en tablas de profundidad 1
$te = HTML::TableExtract->new( depth => 1 );
$te->parse($html);

# Índices que llevarán la cuenta de los elementos leídos de cada clase
my $i_instituto   = 0;
my $i_estudios    = 0;
my $i_conferencia = 0;
my $i_publica     = 0;

# Leeremos las tablas y según el primer valor leído lo guardaremos
# en una u otra estructura del xml
foreach $tabla ( $te->tables ) {

    my @filas = $tabla->rows;

    # Si el número de filas es 0, salimos del bucle
    next if @filas == 0;

    # Leemos primer valor de la fila (nombre del campo)
    my $primera_celda = $filas[0][0];
    next unless defined $primera_celda;


    # Según ese valor
    if    ( $primera_celda eq 'Institución'   ) {

        foreach my $fila ( @filas ) {
            $xml{ institucionales }{ institucion }[ $i_instituto ]{ campea filtra $fila->[0] } = filtra $fila->[1];
        }
        $i_instituto++;

    }
    elsif ( $primera_celda eq 'Grado'         ) {

        foreach my $fila ( @filas ) {
            $xml{ estudios }{ estudio }[ $i_estudios ]{ campea filtra $fila->[0] } = filtra $fila->[1];
        }
        $i_estudios++;

    }
    elsif ( $primera_celda eq 'Nombre Evento' ) {

        foreach my $fila ( @filas ) {
            $xml{ conferencias }{ conferencia }[ $i_conferencia ]{ campea filtra $fila->[0] } = filtra $fila->[1];
        }
        $i_conferencia++;

    }
    elsif ( $primera_celda eq 'Año'           ) {

        foreach my $fila ( @filas ) {
            $xml{ publicaciones }{ publicacion }[ $i_publica ]{ campea filtra $fila->[0] } = filtra $fila->[1];
        }
        $i_publica++;

    }
}

# Finalmente, campos de actuación
# Se encuentran en una tabla de profundidad 2, cuya primera celda vale 'Área'
$te = HTML::TableExtract->new( depth => 2 );
$te->parse($html);
my $i_actuacion = 0;
foreach $tabla ( $te->tables ) {

    my @filas = $tabla->rows;

    # Si el número de filas es 0, salimos del bucle
    next if @filas == 0;

    # Leemos primer valor de la fila (nombre del campo)
    my $primera_celda = $filas[0][0];
    next unless defined $primera_celda and $primera_celda eq 'Área';

    # Guardamos sus valores
    foreach my $fila ( @filas ) {
        $xml{ actuaciones }{ actuacion }[ $i_actuacion ]{ campea filtra $fila->[0] } = filtra $fila->[1];
    }
    $i_actuacion++;
}


# Salida
print XMLout( \%xml, RootName=>'alumno', noattr => 1, xmldecl => '<?xml version="1.0" ?>');
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4

Salida (sólo un extracto de ella):
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
<?xml version="1.0" ?>
<alumno>
  <actuaciones>
    <actuacion>
      <area>ECONOMICAS</area>
      <disciplina>*Teoría económica</disciplina>
      <especialidad>- Teoría microeconómica</especialidad>
      <linea_de_investigacion>Estudio de Competitividad Industrial y Tendencias de la Universidad Contemporanea</linea_de_investiga
   </actuacion>
  </actuaciones>
  <conferencias>
    <conferencia>
      <ano>2005</ano>
      <autores>Juliana Ferrer</autores>
      <nombre_evento>Conferencia Taller Formación de Equipos y escuelas de investigación de alta calidad académica. Reto de las Uni
      <titulo_trabajo>Formación de Equipos y escuelas de investigación de alta calidad académica. Reto de las Universidades Pública
    </conferencia>
    <conferencia>
      <ano>2005</ano>
      <autores>Juliana Ferrer</autores>
      <nombre_evento>III Congreso Iberoamericano de Administración Empresarial y Contabilidad. I Encuentro Internacional de Adminis
      <titulo_trabajo>La Ética gerencial como factor competitivo en las pequeñas y medianas empresas venezolanas</titulo_trabajo>
    </conferencia>
# ...
  </conferencias>
  <estudios>
    <estudio>
      <ano>2001</ano>
      <grado>Doctorado</grado>
      <institucion>Universidad Dr. Rafael Belloso Chacín - URBE</institucion>
      <mencion>Ciencias Gerenciales</mencion>
    </estudio>
    <estudio>
      <ano>1990</ano>
      <grado>Maestria</grado>
      <institucion>Universidad del Zulia</institucion>
      <mencion>Gerencia de Mercadeo</mencion>
    </estudio>
# ---
  </estudios>
  <institucionales>
    <institucion>
      <ciudad>Maracaibo</ciudad>
      <codigo_postal>4001</codigo_postal>
      <correo_electronico>[email protected]; [email protected]</correo_electronico>
      <direccion>Facultad de Cs. Económicas y Sociales, Ciudad Universitaria. LUZ. Maracaibo</direccion>
      <direccion_web></direccion_web>
      <estado>Zulia</estado>
      <institucion>LUZ - Universidad del Zulia</institucion>
      <pais>Venezuela</pais>
    </institucion>
  </institucionales>
  <personal>
    <nacionalidad>Venezolana</nacionalidad>
    <nombre>Ferrer Soto, Juliana</nombre>
    <sexo>F</sexo>
  </personal>
  <ppi>
    <condicion>Activo</condicion>
    <numero>4291</numero>
  </ppi>
  <publicaciones>
    <publicacion>
      <ano>2005</ano>
      <area>ECONOMICAS</area>
      <autor>Caterina Clemenza, Juliana Ferrer y Nancy Andrade</autor>
      <disciplina>*Economía sectorial</disciplina>
      <lugar>Maracaibo, Venezuela, LUZ</lugar>
      <paginas>1-38</paginas>
      <revista>Revista Venezolana de Trabajo Social</revista>
      <tipo>Artículo en Revista nacional registrada en índice internacional reconocido por el PPI</tipo>
      <titulo>Universidad y Sector Productivo. Una Cohesión Impostergable</titulo>
      <volumen>II, 2.</volumen>
    </publicacion>
# ...
  </publicaciones>
</alumno>
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El proceso seguido es:
* Con la ayuda de HTML::TableExtract, sacamos las tablas de un determinado nivel. Y según el valor de la primera celda, sabemos a qué categoría de información pertenece.
* Tenemos dos subrutinas. Una es para filtrar los campos (quitarles los espacios en blanco). Y la otra, 'campea', convierte los nombres de los campos a algo más parecido a una base de datos (sin espacios en blanco, ni acentos, en minúsculas, ni caracteres extraños).
* Se supone que los datos de PPI y datos personales son únicos (sólo aparecen una vez por página), mientras que el resto de las categorías sí que puede aparecer más de una vez.
* Se utiliza la técnica del prototipado de subrutinas, para no tener que usar los paréntesis en sus llamadas (es sólo una cuestión de estilo).

Actualización: Corregida la etiqueta <?xml ?>
Última edición por explorer el 2006-10-09 18:01 @792, editado 2 veces en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Notapor preiddy » 2006-10-09 12:27 @560

Gracias explorer por tu respuestas.
Lamento decir que cuando ejecuto tu script los resultados no son los mismos. Uso el mismo archivo de datos, pero no imprime los datos correspondientes a las publicaciones y a la institución a la que pertenece. Este último dato tambien es único.
Creé un script usando también HTML::TableExtract, y pude apreciar cuantos niveles de tablas y profundidad componen un archivo. Hasta ahora no más de tres.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$te1 = HTML::TableExtract->new(attribs => { width => '99%' }, depth => 3);
$te2 = HTML::TableExtract->new(attribs => { width => '99%' }, depth => 2);
$te3 = HTML::TableExtract->new(attribs => { width => '99%' }, depth => 1);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Dado que todas las tablas de datos tienen un ancho de 99%, las recorro en sus tres niveles, luego imprimo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach $ts1 ($te1->table_states)
    {
     print "\tTabla-1 (", join(',', $ts1->coords), ")///\n";
        foreach $row1 ($ts1->rows)
        {
                 
         print join(': ', @$row1), "\n";
         }
    }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Este bucle lo repito tres veces y sí que logro extraer todos los datos de las tablas.
El problema que tiene con los datos ppi, datos personales e institucioneales, es que no soy capaz de eliminar los espacios en blanco y alienarlos con sus respectivos tags.
Código: Seleccionar todo
                                     4291

                                      :
                                      Activo

                                      :
                                                                          :
Especialidad:
                                        - Teor�a microecon�mica
L�nea
                                        de Investigaci�n:
Estudio de Competitividad Industrial y Tendencias de la Universidad
Contemporanea

Instituci�n:
                                LUZ - Universidad del Zulia
Direcci�n:
Facultad de Cs. Econ�micas y Sociales, Ciudad Universitaria. LUZ.
Maracaibo
Ciudad:
                                Maracaibo
Estado:
                                Zulia
C�digo Postal:
                                4001

¿Es posible que tanto tu script como el mío fallen por un error de caracteres? Es que los archivos originales están en utf8 y los acentos están en formato html (&aacute;)
De hecho cuando ejecuto ambos scripts con -w da esta alerta:
Código: Seleccionar todo
Wide character in print at  03.pl line 66, <HTML> chunk 1.


De nuevo, muchas gracias.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor explorer » 2006-10-09 13:25 @600

preiddy escribiste:Gracias explorer por tu respuestas.
Lamento decir que cuando ejecuto tul script los resultados no son los mismo, uso el mismo archivo de datos, pero no imprime los datos correspondientes a las publicaciones y a la institución a la que pertenece. Este último dato tambien es único.

La prueba la he realizado con la página que indicas en el URL. A mí me salen:
* <instituciones> : 1
* <publicacion> : 51
* <conferencia> : 57
* <actuacion> : 1
¿Qué es lo que te sale diferente a mi?

preiddy escribiste:Este bucle lo repito tres veces y si que logro extraer todos los datos de las tablas.
El problema que tiene con los datos ppi, datos personales e institucioneales, es que no soy capaz de eliminar los espacios en blanco y alienarlos con sus respectivos tags.

Para quitar los espacios en blanco yo uso la función 'filtra'.

preiddy escribiste:¿Es posible que tanto tu script como el mio fallen por un error de caracteres? es que los archivos originales estan en utf8 y los acentos estan en formato html (&aacute;)
De hecho cuando ejecuto ambos scripts con -w da esta alerta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
Wide character in print at  03.pl line 66, <HTML> chunk 1.
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

Yo no sé en dónde falla mi script, porque todavía no me lo has dicho :-)
En cuanto a los caracteres, los print sacan lo que HTML::TableExtract extrae desde el interior de las celdas, tal cual. Según la cabecera del fichero html, la codificación está en iso-8859-1, y las entidades &aacute; son traducidas a esa codificación. Vamos, que el módulo no hace nada extraño. Y XML::Simple no cambia la codificación, aunque el estándar pide que sea siempre en utf-8.
Ese mensaje de aviso no me sale a mí, aún con el 'use warnings' activado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor preiddy » 2006-10-09 16:38 @734

Ejecutando el script me sale
* <instituciones> : 0
* <publicacion> : 0
* <conferencia> : 57
* <actuacion> : 0

El mensaje me sale incluso sin usar el warning. :?
Lo de la codificación lo digo porque en el archivo fuente original no hay acentos, pero si me dices que HTML::TableExtract extrae de las celdas el valor tal cual y las traduce a la codificación iso ya no se me ocurre cual pueda ser el problema.

La opción de usar la función 'filtra' la trate de implementar pero la verdad no fuí capaz de conseguilo. Lo que hice fue otro script que lee el archivo resultante y medio lo acomoda. Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while (<>)
{

s/^\s*//;
s/\s*$//;
s/<opt>//;
s/<\/opt>//;
s/<datospersonales>//;
s/<\/datospersonales>//;
s/<Nacionalidad>/Nacionalidad: /;
s/<\/Nacionalidad>//;
s/<Nombre>/Nombre: /;
s/<\/Nombre>//;
s/<Sexo>/Sexo: /;
s/<\/Sexo>//;
s/(^[0-9])/PPINo: $1/;
s/^Activo/Condicion: Activo/;
s/^Inactivo/Condicion: Inactivo/;

print "$_\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Ya sé que es un parche muy malo, pero la verdad no se me ocurrió otra cosa de momento.
El resultado al ejecutarlo es este:
Código: Seleccionar todo
Nacionalidad: Venezolana
Nombre: Pujol De Freychet, Flor Helene
Sexo: F

Tabla-2 (2,2)///

PPINo: 432

:
Condicion: Activo

:
:


Tabla-2 (2,5)///
�rea:
CIENCIAS DE LA VIDA
Disciplina:
*Virolog�a (ver 310809 y 310911)
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor explorer » 2006-10-09 16:42 @737

Algo está pasando.
Según veo en la salida de tu programa, los caracteres acentuados están representados con entidades utf8, pero en el URL que nos has pasado, todas (o casi todas) de esas entidades están codificadas diréctamente en iso-8859-1.
Me parece que tu estás probando con un fichero distinto al del URL.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor preiddy » 2006-10-09 16:46 @740

Si, efectivamente el archivo de la url esta en iso, creo que el servidor donde lo hospedé lo convirtió directamente de utf8 a iso. Pero me lo he bajado a mi ordenador y sigue dándome los mismos resultados mencionados antes.
* <instituciones> : 0
* <publicacion> : 0
* <conferencia> : 57
* <actuacion> : 0
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor explorer » 2006-10-09 16:58 @748

El problema son los acentos.

En mi script, fíjate que hago la comparación:
Código: Seleccionar todo
if    ( $primera_celda eq 'Institución'   ) {

y ahí hay un acento en formato iso-8859-1 que se supone que es como está en el fuente del html. Pero si da la casualidad que en tu html esa 'ó' está como '&oacute;' u otra cosa, pues no lo encuentra y no lo agrega a la categoría.

La prueba es que te deben salir en <estudios> 4, porque la comparación es con la palabra 'Grado', que no tiene acentos.

Actuación, Institución y publicación fallan porque se compara el contenido de la primera celda con Área, Institución y Año. Todos con acentos o eñes.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor preiddy » 2006-10-09 17:12 @758

Este es el resultado
* estudios 4
* personal 1
* ppi 1
Por eso decia al principio me parecia una cosa de acentos. ¿Crees que es mejor cambiar todos los &acute por sus acentos en el documento? o ¿mejor cambiar los acentos por los &acute en los bucles?
De nuevo ratifica mi agradecimiento.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor preiddy » 2006-10-09 17:23 @766

Me respondo a lo de antes, cambiando ambos, no imprime nada.
Ahora si que no se que pueda ser.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor explorer » 2006-10-09 17:53 @787

La cuestión es saber cómo está codificado el fuente original, porque así se hará en el programa de una manera o de otra.
Y otra cuestión es cómo quieres la codificación en la salida.

Yo me he dado cuenta de que si uso HTML::TableExtract, las entidades &aacute; son traducidas a iso de forma automática, y por eso puedo hacer las comparaciones como están en mi script. La pregunta es saber qué es lo que estás leyendo tu. Qué codificación estás viendo.

Un ejemplo: en el URL que nos has pasado, hay una entrada que dice:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <table width="99%" border="0" cellpadding="2" cellspacing="0"> 
  2. <tr> 
  3. <td width="145" align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>A&ntilde;o</strong></font></span></td> 
  4. <td width="538" align="left" valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif"><font size="1">2005 </font></font></td> 
  5. </tr> 
  6. <tr> 
  7. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Tipo</strong></font></span></td> 
  8. <td align="left" valign="middle"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Artículo en Revista nacional registrada en índice internacional reconocido por el PPI</font></td> 
  9. </tr> 
  10. <tr> 
  11. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>T&iacute;tulo</strong></font></span></td> 
  12. <td align="left" valign="middle"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Universidad y Sector Productivo. Una Cohesión Impostergable</font></strong></td> 
  13. </tr> 
  14. <tr> 
  15. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Autor</strong></font></span></td> 
  16. <td align="left" valign="middle"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Caterina Clemenza, Juliana Ferrer y Nancy Andrade</font></td> 
  17. </tr> 
  18. <tr> 
  19. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Revista</strong></font></span></td> 
  20. <td align="left" valign="middle"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Revista Venezolana de Trabajo Social</font></td> 
  21. </tr> 
  22. <tr> 
  23. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Volumen</strong></font></span></td> 
  24. <td align="left" valign="middle"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">II, 2.</font></td> 
  25. </tr> 
  26. <tr> 
  27. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>P&aacute;ginas</strong></font></span></td> 
  28. <td align="left" valign="middle"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">1-38</font></td> 
  29. </tr> 
  30. <tr> 
  31. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Lugar</font></span></td> 
  32. <td align="left" valign="middle"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Maracaibo, Venezuela, LUZ</font></td> 
  33. </tr> 
  34. <tr> 
  35. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">&Aacute;rea</font></span></td> 
  36. <td align="left" valign="middle"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">ECONOMICAS</font></td> 
  37. </tr> 
  38. <tr> 
  39. <td align="right" valign="middle" bgcolor="#DFEDF6"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Disciplina</font></span></td> 
  40. <td align="left" valign="middle"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">*Economía sectorial</font></td> 
  41. </tr> 
  42. </table> 
que como ves tiene algunos acentos como entidades HTML. Si a continuación ejecuto HTML::TableExtract (en mi linux, con codificación ISO-8859-15 en consola), sale:
Código: Seleccionar todo
Table (1,67):
Año,2005

Tipo,Artículo en Revista nacional registrada en índice internacional reconocido por el PPI
Título,Universidad y Sector Productivo. Una Cohesión Impostergable
Autor,Caterina Clemenza, Juliana Ferrer y Nancy Andrade
Revista,Revista Venezolana de Trabajo Social
Volumen,II, 2.
Páginas,1-38
Lugar,Maracaibo, Venezuela, LUZ
Área,ECONOMICAS
Disciplina,*Economía sectorial
y los acentos han sido convertidos desde sus entidades a acentos iso. Y eso es lo que sale al final en el XML:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
    <publicacion>
      <ano>2005</ano>
      <area>ECONOMICAS</area>
      <autor>Caterina Clemenza, Juliana Ferrer y Nancy Andrade</autor>
      <disciplina>*Economía sectorial</disciplina>
      <lugar>Maracaibo, Venezuela, LUZ</lugar>
      <paginas>1-38</paginas>
      <revista>Revista Venezolana de Trabajo Social</revista>
      <tipo>Artículo en Revista nacional registrada en índice internacional reconocido por el PPI</tipo>
      <titulo>Universidad y Sector Productivo. Una Cohesión Impostergable</titulo>
      <volumen>II, 2.</volumen>
    </publicacion>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Para ser estrictos, un XML debería estar siempre codificado en utf8, así que podríamos hacer lo siguiente: agregamos esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Encode;
sub codifica ($) {
    return encode("utf-8", $_[0] );
}

# y agregamos la cabecera de codificación
print XMLout( \%xml, RootName=>'alumno', noattr => 1, xmldecl => '<?xml version="1.0" encoding="utf-8" ?>');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y luego ponerlo en aquellos sitios donde guardamos los valores en las celdas. Cambiar por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
filtra $tabla->cell(0,0);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
codifica filtra $tabla->cell(0,0);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
    <publicacion>
      <ano>2005</ano>
      <area>ECONOMICAS</area>
      <autor>Caterina Clemenza, Juliana Ferrer y Nancy Andrade</autor>
      <disciplina>*Economía sectorial</disciplina>
      <lugar>Maracaibo, Venezuela, LUZ</lugar>
      <paginas>1-38</paginas>
      <revista>Revista Venezolana de Trabajo Social</revista>
      <tipo>Artículo en Revista nacional registrada en índice internacional reconocido por el PPI</tipo>
      <titulo>Universidad y Sector Productivo. Una Cohesión Impostergable</titulo>
      <volumen>II, 2.</volumen>
    </publicacion>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
y ya vemos la codificación utf8.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados