【发布时间】:2012-08-17 01:35:17
【问题描述】:
我在 Window 7 机器上使用 Perl 进行编码。我可以使用下面的 XPath 代码从 XML 中提取数据
use strict;
use warning;
use XML::LibXML;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($newfile);
my $query = "/tradenet/message/header/unique_ref_no/date/text( )";
my($node) = $doc->findnodes($query);
$node->setData("$file_seq_number");
但是,当我在不同的 XML 上使用相同的代码时,第二个文档的 xpath 如下所示:
/TradenetResponse/OutboundMessage/out:OutwardPermit/out:Declaration/out:Header/cac:UniqueReferenceNumber/cbc:SequenceNumeric
加上 Perl 代码,提取代码如下所示:
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($newfile);
my $query = "/TradenetResponse/OutboundMessage/out:OutwardPermit/out:Declaration/out:Header/cac:UniqueReferenceNumber/cbc:SequenceNumeric/text( )";
my($node) = $doc->findnodes($query);
$node->setData("$file_seq_number");
使用第二个代码,我无法从第二个 XML 检索数据。我收到此错误“无法在 Perl.pl 第 5 行的未定义值上调用方法“setData”。
第二个 XPATH 地址中的“:”字符会影响代码吗?
【问题讨论】:
-
使用严格;使用警告;应该在脚本的顶部。
-
嗨,是的,我确实使用了严格和警告,它实际上位于代码块的顶部,但是,在这里发布整个内容会很长。感谢您的建议并非常感谢。
-
但是,根据建议,我已将其添加到上面的代码中...谢谢!
-
我想,您还必须为“未命名”元素提供命名空间。查看this discussion 了解更多详细信息 - 并寻找其他人,这实际上是一种非常流行的问题。 )