我正在使用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>
...
答案 0 :(得分:2)
Host1上的XML :: Simple使用的XML解析器显然比一个Host2更宽松。
XML :: Simple实际上并不解析XML。它将该任务委派给XML::Parser或XML::SAX。即使这样,后者本身也会将解析委托给许多其他模块之一。
并非所有这些解析器都具有相同的质量。
参考&#34;环境&#34;有关详细信息,请参阅XML::Simple的文档部分。该部分描述了一种选择XML :: Simple使用的解析器的方法。但是,您应该有机会停止使用XML :: Simple!它是如此complicated to use它自己的文档不鼓励人们使用它!