考虑以下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
相反,如果使用单个/表后?那时我在表节点上已经完成了(它应该成为我的'root')所以/应该足够......
提前感谢!
答案 0 :(得分:4)
如果你只想要/
的直接孩子,table[@id="tableid"]
之后的单table
就可以了。要获得a
的任何后代table[@id="tableid"]
,您需要//a
。
//
是/descendant-or-self::node()/
descendant-or-self轴包含上下文节点和上下文节点的后代。由于您将上下文节点建立为table[@id="tableid"]
,因此除了a
的后代之外,您不会获得任何table[@id="tableid"]
个元素。
答案 1 :(得分:3)
//table[@id="tableid"]
将找到<table>
等于id
的所有tableid
元素。
//a/@href
在此之后添加将在<a>
元素中找到所有<table>
元素,在任何位置(子,孙......)
如果您确定所需的所有<a>
元素都低于第一个<td>
(表格 - &gt; tr - &gt; td),则可以跳过第二个//
和做:
//table[@id="tableid"]/tr[1]/td[1]/a/@href
/tr[1]/td[1]
将直接转到<a>
元素。