考虑以下 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/

10-10 03:53