我有一个perl子例程,用于接收基本的xml文档,并使用xpath表达式从文档中收集特定信息。这是
sub parseXml {
my ($rawXml) = @_;
print "Raw XML resonse:\n" . $rawXml . "\n";
# Set up the XPath search.
my $xp = XML::LibXML::XPathContext->new;
my $node = $xp->getContextNode;
$xp->setContextNode($node);
# Extract a list apiece of ids, whos, and whats.
my @ids = $xp->findnodes('//object/void[@property="id"]/int');
my @whos = $xp->findnodes('//object/void[@property="who"]/string');
my @whats = $xp->findnodes('//object/void[@property="what"]/string');
# Iterate over the arrays to print the data.
my $it = each_array(@ids, @whos, @whats);
while (my ($id, $who, $what) = $it->()) {
print sprintf("%2d: ", $id->string_value) .
$who->string_value . " -> '" .
$what->string_value . "'\n";
}
}
问题是当我运行脚本时,我收到一条错误消息:
XPathContext:在第83行丢失当前节点
我做错了什么?我对perl非常陌生。
答案 0 :(得分:3)
您不会在任何时候解析输入XML。鉴于$rawXml
是一个字符串,请务必使用
my $dom = XML::LibXML->load_xml(string => $rawXml);
my $xp = XML::LibXML::XPathContext->new($dom);
我的猜测是第83行my $node = $xp->getContextNode;
,由于文档当前为空,因此失败。无论如何你都不应该需要它,以及以下一行。