AutoPagerizeにおいて、次ページのURLは、SITEINFOのnextLinkに記述されたXPath式(xpathExpression)を用いて、
document.evaluate( xpathExpression, contextNode, namespaceResolver, resultType, result ).singleNodeValue
の結果返される要素から取得される。
このとき、resultTypeとしてXPathResult.FIRST_ORDERED_NODE_TYPEを用いているため、例えばSITEINFOとして
nextLink id("pnnext")|id("navbar navcnt nav")//td[span]/following-sibling::td[1]/a|id("nn")/parent::a
アイテム: Google Search - データベース: AutoPagerize - wedata
のような「|」で連結された記述が有った場合、
- id("pnnext")
- id("navbar navcnt nav")//td[span]/following-sibling::td[1]/a
- id("nn")/parent::a
のいずれかにマッチする、文書中で最初に出現した要素が返される(XPath式上での出現順には依存しないことに注意)。
例えば、AutoPagerize - Google 検索においては上記の1.および2.にマッチする要素がそれぞれ存在するが、文書中では2.にマッチする要素が先に出てくるため
javascript:(function(d,n){n=d.evaluate('id("pnnext")|id("navbar navcnt nav")//td[span]/following-sibling::td[1]/a|id("nn")/parent::a',d,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;alert('node:'+n.nodeName+' id:"'+n.id+'" class:"'+n.className+'"')})(document)
を実行してみると「node:A id:"" class:"fl"」となり、2.にマッチした要素が返されていることがわかる。
つい、XPath式に出てくる順(1.→2.→3.)でマッチした最初のものが返るように誤解してしまいがちなので、覚書として。
そんな誤解をするのは自分だけ?