2014-03-26 22 views
4

我可以對以前的結果執行XPath查詢嗎? 我有這樣的XPath:WWW :: Mechanize ::關於以前結果的Firefox xpath

my @objDivRes = $objBrow->xpath('//div[@id="result"]/ol/div/li', all => 1); 

,但是當我在前面的結果

my @objLink = $objDivRes[0]->MozRepl::RemoteObject::Methods::xpath('//div/h3/a'); 

執行XPath功能我得到了一個錯誤:

MozRepl::RemoteObject: TypeError: doc.evaluate is not a function at test.pl 

是否有一個例子嗎?謝謝

+2

@ThisSuitIsBlackNot的descendands,該語法是有效的,儘管它很少在'$ self-> SUPER :: method()'之外使用。它確實看起來是[預期](http://search.cpan.org/perldoc?MozRepl:RemoteObject::Methods)在這種情況下。 (基本上,這是爲了避免注入'xpath'是其他許多類。) – ikegami

+0

@ikegami嗯,今天我學到了一些東西。 – ThisSuitIsBlackNot

+0

您是否嘗試過強制xpath方法的返回類型,如[documentation](https://metacpan.org/pod/WWW:Mechanize::Firefox#mech-xpath-query-options)中所述,例如'my @objDivRes = $ objBrow-> xpath('// div [@ id =「result」]/ol/div/li',all => 1,type => $ objBrow-> xpathResult('ORDERED_NODE_SNAPSHOT_TYPE')) ;' – ThisSuitIsBlackNot

回答

1

只要使用「節點」選項來設置一個子樹$mech->xpath($query, %options)

在路徑的開始,這意味着上下文節點

my @objDivRes = $objBrow->xpath('//div[@id="result"]/ol/div/li', all => 1); 

my @objLink = $objBrow->xpath('.//div/h3/a', node => $objDivRes[0]); 
相關問題