我有一个 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 非常陌生。
最佳答案
您在任何时候都不会解析输入 XML。鉴于 $rawXml
是一个字符串,请确保使用
my $dom = XML::LibXML->load_xml(string => $rawXml);
my $xp = XML::LibXML::XPathContext->new($dom);
我的猜测是第 83 行是 my $node = $xp->getContextNode;
,该行失败,因为文档当前为空。无论如何,您不应该需要它以及以下行。
关于xml - 使用 XML::LibXML::XPathContext 通过 Perl 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22760277/