[英]What is the difference between .// and //* in XPath?
在通过 Firebug 找到相对 XPath 时:它会创建类似
.//*[@id='Passwd']
--------- 如果我们在开头不使用点,它的含义是什么?
只需在 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'
任何元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.