什么是一个很好的CPANparsing器的HTML MS Excel文件?

我知道常规(二进制)Excel文件可以通过Spreadsheet::ParseExcel进行处理。

但是,我有一个HTML格式的文件:

 <html xmlns:x="urn:schemas-microsoft-com:office:excel"> <head> <meta http-equiv="Content-Type" content="text/html;charset=windows-1252"> <!--[if gte mso 9]> <xml> <x:ExcelWorkbook> <x:ExcelWorksheets> <x:ExcelWorksheet> <x:Name>Holdings</x:Name> <x:WorksheetOptions> 

没有手动parsing它作为一个通用的HTML文件(如TreeBuilder等),是否有一个CPAN模块,将parsing,让我像电子表格访问这样的文件,类似于Spreadsheet::ParseExcel

以下是模块不能工作的地方:

 #!/usr/local/bin/perl use strict; use warnings; use Spreadsheet::ParseExcel; my $parser = Spreadsheet::ParseExcel->new(); my $file = 'file1.xls'; my $workbook; eval {$workbook = $parser->Parse($file);}; #($Workbook returned here is 'undef') 

我使用XPathparsing器从这样的文件中提取需要的东西,在//Row节点内部的./Cell/Data节点上迭代,但不是使用与Spreadsheet::ParseExcel相同的接口。

我还发现,在使用XMLparsing器之前,您需要进行一些源过滤。 至less你必须跑步

 s/<xml version>/<!-- xml version -->/; s/&/&amp;/g 

在input。


这是一个简洁但完整的解决scheme,将这样的文件提取到一个二维数组:

 use XML::XPath; open F, '<', $dirty_file_name; open G, '>', $clean_file_name; while(<F>) { s/<xml version>/<!-- xml version -->/; s/&/&amp;/g; print G } close G; close F; @table = map { [ map { $_->string_value } $_->find('./Cell/Data')->get_nodelist ] } XML::XPath->new( filename => $clean_file_name )->find('//Row')->get_nodelist;