繁体   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