考虑以下 HTML 代码:
<html>
<head>
<title>Example website</title>
</head>
<body>
<div>
<table id='tableid'>
<tr>
<td>
<a href="/blabla" title="Blabla1">Blabla1</a>
<a href="/blabla" title="Blabla1">Blabla2</a>
<a href="/blabla" title="Blabla1">Blabla3</a>
<a href="/blabla" title="Blabla1">Blabla4</a>
</td>
<td>col2</td>
<td>col3</td>
<td>col4</td>
</tr>
</table>
</body>
</html>
如果我想获得所有链接,为什么我必须使用:
//table[@id="tableid"]//a/@href
相反,如果在表后使用单个/?那时我已经在表节点上(它应该成为我的“根”)所以/应该足够了......
提前致谢!
最佳答案
如果您只想要 /
的直接子代,那么 table[@id="tableid"]
之后的单个 table
就可以工作。要获得 a
的任何后代 table[@id="tableid"]
,您需要 //a
。//
是 /descendant-or-self::node()/
的缩写
后代或自我轴包含上下文节点和上下文节点的后代。由于您将上下文节点建立为 table[@id="tableid"]
,因此除了 a
的后代元素之外,您不会获得任何 table[@id="tableid"]
元素。
关于xpath - 为什么需要//而不是/,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20192989/