У меня есть XML-представление документа в форме:
<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: недопустимая ошибка положения контекста». Я прочитал на документы и нашел этот интересный кусок
оценка позиции функции XPath () в начальном контексте вызывает ошибку XPath
Моя проблема в том, что я понятия не имею, что делать с этой информацией. Что такое «начальный контекст»? Как заставить движок автоматически отслеживать положение контекста?
Re: @ Dan
Ценю ответ. Я попробовал ваш пример, и это сработало. В моем коде я предполагал, что контекст - это узел, представленный моей переменной perl. Итак, $ предложений -> найти ('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()");
Может ли position () использоваться только для ограничения запроса, как у вас?