У меня есть подпрограмма perl, которая предназначена для получения базового документа xml и использования выражений xpath для сбора определенной информации из документа. ЗдесьАнализ XML с Perl с использованием XML :: LibXML :: XPathContext
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.
Какая линия 83? – Robin
Кажется, моя догадка о 'getContextNode' была права. ;) –
Это было точно. getContextNode был там, чтобы попробовать другое решение, которое не сработало. Ваше решение, Йенс, было правильным, как есть. В очередной раз благодарим за помощь. Робин, я считаю, что строка 83 была моей $ xp = XML :: LibXML :: XPathContext-> new; –