Perl脚本解析Excel报错:XML格式异常(Strawberry Perl迁移问题)
解决Strawberry Perl下Excel解析的XML格式错误问题
检查XML模块版本差异
ActiveState与Strawberry Perl搭载的XML::Parser及依赖的Expat库版本可能存在差异,旧版Expat对非标准XML的容错性更强。可尝试安装低版本XML::Parser:cpanm XML::Parser=2.44该版本与旧版ActiveState Perl常用的
XML::Parser版本接近,兼容性更好。修复Excel转XML的格式问题
原脚本处理的Excel文件(尤其是.xls格式)转XML后可能包含非法字符或不符合严格XML规范的内容,旧版解析器可容忍但新版不行:- 确保文件编码为UTF-8,无BOM或乱码;
- 解析前过滤XML非法控制字符:
$xml_content =~ s/[\x00-\x08\x0b\x0c\x0e-\x1f]//g;
替换为更兼容的解析模块
若XML::Parser的严格模式无法适配,可换用容错性更高的模块:- 用
XML::LibXML开启容错模式:use XML::LibXML; my $parser = XML::LibXML->new(recover => 1); my $doc = $parser->parse_file($excel_xml_path); - 直接使用专门的Excel解析模块,跳过手动XML处理步骤:
# 处理.xls文件 use Spreadsheet::ParseExcel; my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse($excel_file_path); # 处理.xlsx文件 use Spreadsheet::ParseXLSX; my $parser = Spreadsheet::ParseXLSX->new(); my $workbook = $parser->parse($excel_file_path);
- 用
排查脚本解析逻辑
查看脚本第255行的XML解析代码,确认是否依赖ActiveState Perl下的默认宽松设置。XML::Parser本身严格模式调整空间有限,优先考虑上述模块替换方案。
内容的提问来源于stack exchange,提问作者JeyJim
相关产品推荐
相关产品推荐

