次の形式のドキュメントの 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 関数 position() を評価すると、XPath エラーが発生します
私の問題は、この情報をどう処理すればよいかわからないことです。「初期コンテキスト」とは何ですか? エンジンがコンテキストの位置を自動的に追跡するようにするにはどうすればよいですか?
Re: @ダン
答えに感謝します。あなたの例を試してみましたが、うまくいきました。私のコードでは、コンテキストが 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()");
position() は、あなたのようなクエリを制限するためにのみ使用できますか?