XPathのid(object)と//*[@id=object]の違いについて

http://tv2ch.com/jlab-10s/などユニークではないIDがあるページを参照しながら読むエントリー。

id(object)の場合

var ga = document.evaluate('id("sam_height")', document, null, 7, null);
console.log(ga.snapshotLength) //1

//*[@id=object]の場合

var gi = document.evaluate('//*[@id="sam_height"]', document, null, 7, null);
console.log(gi.snapshotLength) //20

結果

小難しいことはさておき、id(object)は一つだけ検出する。ハードコアな動作。
//*[@id=object]は素直に全て探してきてくれる。