2016-02-24 72 views
6

雖然通過螢火蟲找到相關的XPath:它會建立像XPath中.//和// *有什麼區別?

  1. .//*[@id='Passwd'] ---------如果我們不使用時的點開始什麼表示?

  2. 只需在Xpath中添加//*它會突出顯示---各種頁面元素----------它代表什麼?

以下是用於Gmail密碼字段的XPath。 *的意義是什麼?

  • .//*[@id='Passwd']

  • //child::input[@type='password']

+0

這對我來說是一個簡單的開始:http://www.zvon.org/xxl/XPathTutorial/General/examples.html – SiKing

回答

10

這些表達式所有選擇不同的節點集:

.//*[@id='Passwd ']

的'「。開始意味着當前處理在當前節點處開始。 '*'選擇從當前節點遞減的所有元素節點,其中@id-attribute-value等於'Passwd'。

如果我們在開始時不使用點,它表示什麼?

那麼你還是選擇用@id -attribute價值的整個文件等於「passwd」文件的所有元素節點。

只需添加// *在XPath - 它突出---各種頁面元素

這將選擇整個文檔中的所有元素節點。

下面提到:XPatht的Gmail密碼字段是真實的什麼是*的意義?

.//*[@id='Passwd'] 

這將選擇從中@id -attribute值等於「的passwd」當前節點降序所有元素節點。

//子::輸入[@類型= '密碼']

這將選擇名爲input其中@type -attribute值是等於 '密碼' 的所有子元素節點。軸前綴child::可能被省略,因爲它是默認行爲。

選擇合適表達式的語法解釋爲here at w3school.com

並且軸(當前處理點)被解釋爲here at another w3school.com page

+1

如果有疑問,請看下面的@ kjhughes的好答案。 –

+0

@MathiasMüller:我糾正了我答案的缺陷。 – zx485

+1

現在好多了,謝謝編輯。請注意,來自w3schools.com的信息通常不準確,例如「節點」和「元素節點」之間的混淆可能源自這個不正確的網頁。 –

2

XPath中的點被稱爲「上下文項表達」。如果你在表達式的開頭加上一個點,它會使它具體化到上下文中。換句話說,它將在您調用「通過XPath查找元素」方法的節點上下文中搜索元素id="Passwd"

*.//*[@id='Passwd']有助於匹配任何元素id='Passwd'

1
  1. 對於第一個問題:這都是關於上下文的。你可以看到Syntax知道'。','..'等意思。另外,我敢打賭你找不到比This Link更好的解釋。
  2. 第二個問題的簡化答案:您通常會找到使用html標記(如td,a,li,div等)的節點。但'*'表示找到與您的給定屬性匹配的任何標記。它主要用於確定給定的屬性,但不包括該元素可能帶有的標籤,例如,假設我想要一個ID爲'xyz'的所有元素的列表,不管它是在任何標籤中。

希望它能幫助:)

16

有在這裏打球幾個不同的,關鍵的XPath概念...

絕對VS相對的XPath(/ VS .

  • /引入絕對位置路徑,從文檔的根部開始ument。
  • .從上下文節點開始引入相對位置路徑。

命名元件VS任何元件(ename VS *

  • /ename選擇一個ename根元素
    • ./ename選擇當前節點的所有ename子元素。
  • /*選擇根元素,而不考慮名稱。
    • ./**選擇上下文節點的所有子元素,而不管名稱如何。

後代或自身軸線(//*

  • //ename選擇文檔中的所有ename元素。
    • .//ename選擇上下文節點處或下方的所有ename元素。
  • //*選擇文檔中的所有元素,而不考慮名稱。
    • .//*選擇位於上下文節點處或下方的所有元素,無論名稱如何。

這些概念記住,這裏有回答您的具體問題...

  • .//*[@id='Passwd']指或 電流下選擇所有元素上下文節點的id屬性值等於 'Passwd'
  • //child::input[@type='password']可以簡化爲 //input[@type='password']和手段,選擇所有input元件 文檔中具有等於'password'一個type屬性值。
+4

這個答案應該是被接受的答案,因爲它是最準確和最完整的,在我看來。 –