Perl XML ::简单的不一致行为

时间:2017-08-26 13:07:43

标签: xml perl xml-simple

我正在使用XML :: Simple

读取XML文件

但是,我面临一个相当“奇怪”的情况,其中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:./模板

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

Host2 [VM]

bash-4.1#perl -v

这是为x86_64-linux-thread-multi ...构建的perl,v5.10.1(*)...

bash-4.1#echo $ 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>
...

1 个答案:

答案 0 :(得分:2)

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

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

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

参考&#34;环境&#34;有关详细信息,请参阅XML::Simple的文档部分。该部分描述了一种选择XML :: Simple使用的解析器的方法。但是,您应该有机会停止使用XML :: Simple!它是如此complicated to use它自己的文档不鼓励人们使用它!