我有了形式的文件的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錯誤
我的問題是,我不知道該怎麼辦與此信息。什麼是「初始背景」?我如何讓引擎自動跟蹤上下文的位置?
回覆:@丹
欣賞的答案。我試過你的例子,它的工作。在我的代碼中,我假定上下文是由我的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()");
可以定位()只被用來限制查詢像你有嗎?
我真正在尋找的是我已經擁有的節點的位置。我編輯的問題是否可以更深入地瞭解問題? – 2010-06-02 16:26:28