【问题标题】:Perl XML::DOM issues with ASCII XML?ASCII XML 的 Perl XML::DOM 问题?
【发布时间】:2011-06-16 16:31:14
【问题描述】:

我对 Perl 比较陌生,正在编写一些 XML 解析脚本。我已经成功完成了两个,这是我的第三个。我遇到了一些我认为与被 ASCII 编码的 XML 文档相关的问题。

我正在使用带有 httpd/apache/perl 的 Fedora 14

我有

use CGI::Carp qw(fatalsToBrowser);

在我的网络脚本中,所以我确实在网页上看到了大部分错误,但对于以下错误,我在屏幕上没有看到任何错误,除了通用 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] 可以,因为如果我将 $_0 打印到文件中,我会看到“XML::DOM::Document=ARRAY(0x8bb65b8)”

我也确定 findnodes 是罪魁祸首。如果我执行 findnodes("//*") 则事件失败。

有人知道问题出在哪里吗?我如何才能找到有关失败的更多信息?

谢谢,

埃里克

【问题讨论】:

  • 在你的代码中你有 $_[0]$_0 吗? $_0$_[0] 不同,它只是标量变量$_0use strict; 会告诉你。
  • 是的,@mirod,这就是答案 :) 你想发布一个答案以便我可以将其标记为答案吗?

标签: xml perl


【解决方案1】:

立即回答:$_0 不是$_[0],它是标量变量$_0use strict; 会告诉你。

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

【讨论】:

  • 很遗憾,我的主机帐户没有 LibXML。我必须努力将其复制到我的主目录并使其正常工作。至于编码,文档是 ASCII 而不是 US-ASCII,所以我暂时交叉手指,接下来会解决这个问题。
  • 那就不行了,XML::LibXML是基于libxml2的,所以你需要安装它,并有一个编译器。它行不通。顺便说一句,看起来您正在使用 XML::DOM::XPath,至少您可以使用它;--)
猜你喜欢
  • 2014-08-10
  • 2011-04-30
  • 1970-01-01
  • 2011-05-05
  • 2013-07-24
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多