2011-06-16 86 views
0

我对Perl比较陌生,写了一些XML解析脚本。我已经完成了两个,这是我的第三个。我遇到了一些问题,我认为这些问题都与ASCII编码的XML文档有关。使用ASCII XML的Perl XML :: DOM问题?

我使用的Fedora 14的httpd /阿帕奇/ perl的

我有

use CGI::Carp qw(fatalsToBrowser); 
在我的web脚本

,所以我看到网页上的错误,在大多数情况下,但对于以下错误,除了通用的Apache“500内部服务器错误”,屏幕上没有看到任何错误,而httpd错误日志只是简单地声明“脚本标题的提前结束”

以下是代码的要点:

my $cparser = new XML::DOM::Parser; 
my $refdoc = $cparser->parse($cfile, ProtocolEncoding => 'US-ASCII'); 
findmynodes $refdoc; 
... 
sub findmynodes 
{ 
my @refnode = $_0->findnodes("/conf:ConfModel"); 
... 

我敢肯定,$ _ [0] OK,因为如果我打印$ _0到文件之我见 “XML DOM :: ::文件=阵列(0x8bb65b8)”

我也肯定findnodes是罪魁祸首。事件,如果我做findnodes(“// *”)它失败。

有谁知道这个问题可能是什么?我怎样才能找到更多有关失败的信息?

感谢,

埃里克

+1

你的代码中有'$ _ [0]'或'$ _0'吗? '$ _0'与'$ _ [0]'不同,它只是标量变量'$ _0'。 '严格使用;'会告诉你。 – mirod 2011-06-16 16:40:08

+0

是的,@ mirod,这就是答案:)你想发布一个答案,所以我可以将其标记为答案? – ericp 2011-06-16 16:55:25

回答

3

最直接的答案:$_0$_[0],它是标量$_0use strict;会告诉你。

此外,如果可以的话,请勿使用XML :: DOM,XML::LibXML更新,维护更好,功能更强大......您可以将其命名。 ProtocolEncoding也是一个危险的选项,这意味着你不信任XML中的编码声明。在这种情况下,我通常在解析文件之前检查并在必要时修复编码。这样我有一个干净的,格式良好的XML文件。

+0

不幸的是,我的托管帐户没有LibXML。我必须将其复制到我的主目录并使其工作。至于编码,文档是ASCII而不是US-ASCII,所以我暂时穿过我的手指,然后解决下一个问题。 – ericp 2011-06-16 17:14:06

+0

它不起作用,那么XML :: LibXML基于libxml2,因此您需要安装它并拥有一个编译器。它不会工作。顺便说一句,它看起来像你正在使用XML :: DOM :: XPath,至少你有这个为你; - ) – mirod 2011-06-16 17:16:45

+0

ericp,[us-ascii是相同的ascii](http://www.iana .ORG /任务/字符集)。 – daxim 2011-06-16 17:21:47