簡體   English   中英

XPath 中的 .// 和 //* 有什么區別?

[英]What is the difference between .// and //* in XPath?

在通過 Firebug 找到相對 XPath 時:它會創建類似

  1. .//*[@id='Passwd'] --------- 如果我們在開頭不使用點,它的含義是什么?

  2. 只需在 Xpath 中添加//* -- 它突出顯示 --- 各種頁面元素 ---------- 它意味着什么?

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

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

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

這里有幾個不同的、關鍵的 XPath 概念在起作用……

絕對與相對 XPath ( / vs . )

  • /引入了一個絕對位置路徑,從文檔的根目錄開始。
  • . 引入了一個相對位置路徑,從上下文節點開始。

命名元素與任何元素( ename*

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

后代或自我軸( //*

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

考慮到這些概念,以下是您特定問題的答案...

  • .//*[@id='Passwd']表示選擇上下文節點處或下方所有id屬性值等於'Passwd'元素。
  • //child::input[@type='password']可以簡化為//input[@type='password'] ,意思是選擇文檔中所有type屬性值等於'password' input元素.

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

.//*[@id='密碼']

這 '。' at the beginning 表示當前處理從當前節點開始 “*”選擇從當前節點下降的所有元素節點,@ @id -attribute-value 等於“Passwd”。

如果我們在開頭不使用點,它的含義是什么?

然后,您將選擇整個文檔中@id -attribute-value 等於“Passwd”的所有元素節點。

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

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

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

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

這將選擇從當前節點下降的所有元素節點,其中@id -attribute-value 等於'Passwd'。

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

這將選擇所有名為input @type -attribute-values 等於“密碼”的子元素節點。 child::軸前綴可以省略,因為它是默認行為。

w3school.com上解釋了選擇適當表達式的語法。

軸(處理中的當前點)在另一個 w3school.com 頁面上進行了解釋。

XPath 中的點稱為“上下文項表達式” 如果您在表達式的開頭放置一個點,它將使其特定於上下文。 換句話說,它將在您調用“通過 XPath 查找元素”方法的節點的上下文中搜索id="Passwd"的元素。

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

  1. 對於第一個問題:一切都與上下文有關。 您可以查看語法以了解 '.'、'..' 等的含義。 另外,我敢打賭,您找不到比This Link更好的解釋了。
  2. 第二個問題的簡化答案:您通常會使用 td、a、li、div 等 html 標簽找到節點。但“*”表示找到與給定屬性匹配的任何標簽。 當您確定給定屬性但不確定元素可能附帶的標簽時,通常使用它,例如假設我想要一個 ID 為“xyz”的所有元素的列表,無論它在任何標簽中。

希望能幫助到你 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM