You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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规范的内容,旧版解析器可容忍但新版不行:

    1. 确保文件编码为UTF-8,无BOM或乱码;
    2. 解析前过滤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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:22:41