У меня есть XML-представление документа, который имеет вид:Почему модуль Perl XML :: LibXML (в частности, XPathContext) не оценивает позиции?
<response>
<paragraph>
<sentence id="1">Hey</sentence>
<sentence id="2">Hello</sentence>
</paragraph>
</response>
Я пытаюсь использовать XML :: LibXML для разбора документа и получить позицию предложения.
my $root_node = XML::LibXML->load_xml(...)->documentElement;
foreach my $sentence_node ($root_node->findnodes('//sentence')->get_nodelist){
print $sentence_node->find('position()');
}
Ошибка, которую я получаю, это «ошибка XPath: неверная ошибка контекстной позиции». Я читать на docs и нашел этот интересный лакомый
оценки функции XPath положение() в исходном контексте вызывает ошибку XPath
Моя проблема заключается в том, что я понятия не имею, что делать с этой информацией. Что такое «исходный контекст»? Как заставить движок автоматически отслеживать позицию контекста?
Re: @Dan
Цените ответ. Я попробовал ваш пример, и это сработало. В моем коде я предполагал, что контекст является узлом, представленным моей переменной perl. Итак, $ sentence-> find ('position()'), я хотел быть «./position()». Несмотря видеть рабочий пример, я до сих пор не могу сделать
foreach my $sentence ...
my $id = $sentence->getAttribute('id');
print $root_node->findvalue('//sentence[@id=' . "$id]/position()");
Я могу, однако, сделать
$root_node->findvalue('//sentence[@id=' . "$id]/text()");
Можно расположить() можно использовать только для ограничения запроса, как у вас есть?
То, что я действительно ищу, - это положение узла, который у меня уже есть. Мой отредактированный вопрос дает больше информации о проблеме? –