Perl XML::Simple 不一致的行为

Perl XML::Simple Inconsistent behavior

我正在使用 XML::Simple

读取 XML 文件

但是,我面临着 "odd" 的情况,其中 XML::Simple 在主机之间表现不一致

我最能猜到 shell 可以发挥一些作用 - 但我不能确定,因为我没有发现针对 XML::Simple

的任何此类问题记录

任何指针都将对调试此问题有很大帮助

use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
sub readXml() {

    print "XML::Simple version : $XML::Simple::VERSION\n";

    my ($phRec) = eval {XMLin("sample.xml", ForceArray => 1, KeyAttr => [] )};
    if ( $@ ) {
        print (join '', $@);
        return 0;
    }
    print Dumper($phRec);
    return 1;
}

readXml();

sample.xml

<?xml version="1.0" encoding="utf-8"?>
<node>
    <people name="whatever">etc</people>
    <people name="abc <whatever> pqr">etc</people>
</node>

我知道这不是有效的 XML - 但我宁愿 XML::Simple 在两个主机中都失败。

Host1 [开发主机]

bin: perl -v

这是为 x86_64-linux 构建的 perl 5,版本 14,subversion 1 (v5.14.1) ...

bin: echo $SHELL

/bin/bash

bin: ./template

XML::Simple version : 2.18
$VAR1 = {
          'people' => [
                      {
                        'content' => 'etc',
                        'name' => 'whatever'
                      },
                      {
                        'content' => 'etc',
                        'name' => 'abc <whatever> pqr'
                      }
                    ]
        };

主机 2 [虚拟机]

bash-4.1# perl -v

这是为 x86_64-linux-thread-multi...

构建的 perl,v5.10.1 (*)

bash-4.1#回显$SHELL

/bin/csh

bash-4.1# ./template

XML::Simple version : 2.18
sample.xml:4: parser error : Unescaped '<' not allowed in attributes values
    <people name="abc <whatever> pqr">etc</people>
                      ^
sample.xml:4: parser error : attributes construct error
    <people name="abc <whatever> pqr">etc</people>
...

XML::Simple 在 Host1 上使用的 XML 解析器显然比 Host2 更宽松。


XML::Simple 实际上并不解析 XML。它将该任务委托给 XML::Parser or XML::SAX。即使那样,后者本身也会将解析委托给许多其他模块之一。

并非所有这些解析器都具有相同的质量。

请参阅 XML::Simple's documentation for more info. That section documents a means to select the parser XML::Simple uses. However, you should this chance to stop using XML::Simple! It's so 的 "Environment" 部分,它自己的文档不鼓励人们使用它!