2016-10-06 34 views
0

當我在google.com執行Chrome開發人員工具控制檯上的這些XPath表達式,我得到了相同的結果XPath中的//和.//有什麼區別?

  • $x("(.//*[@id='gs_lc0'])")

  • $x("(//*[@id='gs_lc0'])")

什麼是使用點在XPath中?

+0

一個**(//)**是一個絕對路徑,另一個**(.//)**是一個相對路徑。 **(.//)**選擇不同的節點集,其中**(。)**表示它從當前節點開始。另一方面,使用**(//)**將選擇具有您提供的屬性的所有元素節點。 – Codexer

+0

我不這麼認爲,因爲絕對路徑是建立使用/ 像 /HTML /體/ H1 都是相對路徑 –

+0

@PedroMachado:擁有你的問題[**得到答覆**](HTTP:/ /stackoverflow.com/a/39903294/290085)滿意嗎? – kjhughes

回答

1

在XPath中,//.//均爲句法縮寫:

  • //是短期的/descendant-or-self::node()/
  • .//是短期的self::node()/descendant-or-self::node()/

descendant-or-self軸包含上下文節點和所有後代的上下文節點。 因此,//.//之間的差異減少到上下文節點的差異。

對於//,上下文節點是根節點; //absolute location path

對於.//,上下文節點取決於上下文; .//relative location path。在Google Developer Tools控制檯的頂級評估中,上下文節點是根節點,因此您會看到相同的結果。

簡而言之:

  • 使用//當你想從整個文檔中選擇節點。
  • 如果您希望選擇僅位於上下文節點下方的節點,請使用.//