Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPath-选择其他元素之后的第一个元素_Xpath - Fatal编程技术网

XPath-选择其他元素之后的第一个元素

XPath-选择其他元素之后的第一个元素,xpath,Xpath,我对XPath相当陌生,现在已经花了几个小时来摆弄它,所以我不完全确定您是否可以用它做下面这样的事情 好的,下面是一个场景:我想从页面中找到一个链接。该链接只能通过其文本值来识别,即 我可能应该指定,我只想接收一个结果或一组结果,第一个元素是“正确的”元素——我想找到的元素 编辑: 这个问题已经得到了回答,但有一些评论认为我应该进一步说明这一点,以便人们能够真正理解这个问题;) 因此,我们的想法是使用一个元素来指定另一个元素的位置,该元素可能会在文档中散布重复的搜索结果 基本上

我对XPath相当陌生,现在已经花了几个小时来摆弄它,所以我不完全确定您是否可以用它做下面这样的事情

好的,下面是一个场景:我想从页面中找到一个链接。该链接只能通过其文本值来识别,即
我可能应该指定,我只想接收一个结果或一组结果,第一个元素是“正确的”元素——我想找到的元素

编辑: 这个问题已经得到了回答,但有一些评论认为我应该进一步说明这一点,以便人们能够真正理解这个问题;)

因此,我们的想法是使用一个元素来指定另一个元素的位置,该元素可能会在文档中散布重复的搜索结果

基本上,如果您想从一组下拉菜单中找到一个给定的链接,并且该下拉菜单中的元素具有相同的名称或值,您会遇到类似的情况


基本上就是这样。我知道这仍然有点难理解,但不幸的是,我很难更好地解释这一点。我相信其他人可以做得更好,如果真是这样的话,我很高兴在这里介绍一下

我理解正确:您想要“第二个下拉菜单”之后的“某个链接”节点


这应该可以做到(我不是100%确定您需要检查position()=1,但是我认为如果您省略它,它将匹配所有后续ul,因为前面的是“所有”前面的节点-这取决于xml结构的其余部分)

我已经阅读了您的问题好几次,但我认为我理解了它。你感兴趣的是谓词。谓词允许您根据条件拾取节点

例如,您可以执行以下操作:

//a[text()='second dropdown menu']/following::ul[1]/li/a[text()='link i want to find']
这将选择任何具有特定文本的锚,找到下一个ul,然后继续遍历其子级

此外,您可以在结果集中指定位置索引,下面的XPath是一个示例(但它不能解决您的问题):

或者可以使用轴在兄弟/祖先/子代之间导航:

//a[ancestor::ul/preceding::a[1]/text() = 'second dropdown menu']/text()
所以我不确定我是否完全理解您的问题,但这应该可以帮助您编写XPath


基本上,我假设您的XPath与多个列表中的锚点匹配,并且您希望确保选择正确的锚点。在XPath中的某个点上,您需要一个谓词来指定一个条件,该条件仅适用于所需节点所在的列表。

如果我错了,请更正我-您需要从上面的示例中选择“第二个下拉菜单”,但文本可以复制,因此您只需要第二个。 XPath:


实际上,我想找到带有“link i want find”值的链接,但这也可以;)我稍后会检查一下。我只是读了一点,您需要position()=last()而不是position()=1,因为preceding以文档顺序将上下文节点之前的所有节点“是的,但想法是通过两个单独的“参数”查找元素。第一个参数是标记的“索引”,第二个参数是我要查找的特定元素。因此,通过静态位置引用是不可行的。这将返回:或者什么也没有,如果只有一个锚与之匹配,请更新问题-从回答中,您可以看到您的目标不明确
//a[text()='second dropdown menu']/following::ul[1]/li/a[text()='link i want to find']
//a[text()='first dropdown menu']/ul/li[last()]/a/text()
//a[ancestor::ul/preceding::a[1]/text() = 'second dropdown menu']/text()
//a[text()='second drop down menu'][2]