Hola:
El problema que tienes con HTML es que es tan loose que hacer un buen parser es muy díficil. Intenté usar el módulo AnyData y tampoco logré que jalara, por lo que mejor opté por el
HTML::TreeBuilder y el
XML::Simple para convertir una tabla HTML a XML.
No sé como estén las tablas de HTML que tu deseas convertir, pero el ejemplo lo podrás modificar muy facilmente de acuerdo a tus necesidades. Lo primero que vamos a hacer es hacer el parse de nuestro HTML:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict
;
use HTML
::TreeBuilder;
use XML
::Simple;
my $html = q|
<html>
<head>
<title>Una Tabla
</title
>
</head
>
<body>
<table id
="Author1">
<tr>
<td class
="name">Uriel Lizama
</td
>
<td class
="link">http
://perlenespanol
.com
</td
>
</tr
>
</table
>
<table id
="Author2">
<tr>
<td class
="name">Joaquin Ferrero
</td
>
<td class
="link">http
://joaquinferrero
.com
</td
>
</tr
>
</table
>
</body
>
</html
>
|;
my %Content;
my $tree = HTML
::TreeBuilder->new_from_content($html);
for my $table ( $tree->look_down('_tag','table') ){
my %fields = map { $_->attr('class'), $_->as_text } $table->look_down('_tag','td');
$Content{$table->attr('id')} = \%fields;
}Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Después de esto tendrás un bonito hash que se ve así:
- Código: Seleccionar todo
$VAR1 = {
'Author1' => {
'link' => 'http://perlenespanol.com',
'name' => 'Uriel Lizama'
},
'Author2' => {
'link' => 'http://joaquinferrero.com',
'name' => 'Joaquin Ferrero'
}
};
Convertir este hash a cualquier formato es realmente sencillo, y para convertirlo a XML todo lo que tenemos que hacer es:
Using perl Syntax Highlighting
my $xsimple = XML
::Simple->new();
print $xsimple->XMLout(\%Content,
noattr
=> 1,
xmldecl
=> '<?xml version="1.0" ?>');Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Y tu XML resultante será:
Using xml Syntax Highlighting
<?xml version="1.0" ?>
<opt>
<Author1>
<name>Uriel Lizama
</name>
<link>http://perlenespanol.com
</link>
</Author1>
<Author2>
<name>Joaquin Ferrero
</name>
<link>http://joaquinferrero.com
</link>
</Author2>
</opt>Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Saludos
Actualización: Corregida la etiqueta <?xml ?>