0

我想提取此表的特定数字(第一个 TD)的地址。表的唯一唯一标识符是 H3。

这是表格的代码:

<table width="95%" cellpadding=5 cellspacing=0 border=1>
    <tr><td colspan="4"><h3>The list</td></tr>
    <tr>
        <td>Number</td><td>First Name</td>
        <td>Last Name</td><td>Address</td>
   </tr>

我努力了:

//table[@h3=’See this now’]/’tr/td[87] and td[107] and td[116]

我是 xpath 的新手,一般来说是编程。这很有趣,但希望能够解决这个问题!感谢任何帮助:D

4

1 回答 1

1

首先,您的 HTML 是错误的。

  • 您没有关闭 Table 元素。
  • 您没有关闭 H3 元素。
  • 您必须用引号将您的属性括起来。

     <table width="95%" cellpadding="5" cellspacing="0" border="1"> 
       <tr> 
         <td colspan="4"> 
           <h3>The list</h3> 
         </td> 
       </tr>
       <tr> 
         <td>Number</td> 
         <td>First Name</td>  
         <td>Last Name</td> 
         <td>Address</td>
      </tr>
    </table>
    

一旦您修复了 XHTML 的格式。您可以遍历文档树。

路径

任何具有 h3 的 td 的表。

//table//td/h3

将返回

<h3>The list</h3>

对于号码

//table//tr[2]/td[1]    <-- any table, the second tr element in this table, the first td in that second tr

将返回

<td>Number</td>

因此,如果我们将多个表添加到文档中,并且您想为任何表中的每个元素查找多个结果,这非常简单。假设我们有一个 XHTML 文档,其父元素内包含许多表格,例如“根”元素。

<root>
    <table width="95%" cellpadding="5" cellspacing="0" border="1">
        <tr>
            <td colspan="4">
                <h3>The list</h3>
            </td>
        </tr>
        <tr>
            <td>123</td>
            <td>First Name</td>
            <td>Last Name</td>
            <td>Address</td>
        </tr>
    </table>
    <table width="95%" cellpadding="5" cellspacing="0" border="1">
        <tr>
            <td colspan="4">
                <h3>The list</h3>
            </td>
        </tr>
        <tr>
            <td>456</td>
            <td>First Name</td>
            <td>Last Name</td>
            <td>Address</td>
        </tr>
    </table>
    <table width="95%" cellpadding="5" cellspacing="0" border="1">
        <tr>
            <td colspan="4">
                <h3>The list</h3>
            </td>
        </tr>
        <tr>
            <td>789</td>
            <td>First Name</td>
            <td>Last Name</td>
            <td>Address</td>
        </tr>
    </table>
</root>

我们可以使用以下 XPATH 表达式提取每个表中第二行中第一个表数据的数量:

//table/tr[2]/td[1]

这会给我们的结果

<td>123</td>
-----------------------
<td>456</td>
-----------------------
<td>789</td>

现在,假设我们有几个表,但只有一个表对我们很重要,表必须有 H3 元素,其他元素对我们不重要,如果这张表有 H3 元素,我们要提取第二行第一个 td。

<root>
    <table width="95%" cellpadding="5" cellspacing="0" border="1">
        <tr>
            <td colspan="4">
                <h4>Ignore me!</h4>
            </td>
        </tr>
        <tr>
            <td>1164961564896</td>
            <td>First Name</td>
            <td>Last Name</td>
            <td>Address</td>
        </tr>
    </table>
    <table width="95%" cellpadding="5" cellspacing="0" border="1">
        <tr>
            <td colspan="4">
                <h1>I'm not interesting</h1>
            </td>
        </tr>
        <tr>
            <td>456456466465</td>
            <td>First Name</td>
            <td>Last Name</td>
            <td>Address</td>
        </tr>
    </table>
    <table width="95%" cellpadding="5" cellspacing="0" border="1">
        <tr>
            <td colspan="4">
                <h3>IM THE IMPORTANT TABLE!</h3>
            </td>
        </tr>
        <tr>
            <td>123456789</td>
            <td>First Name</td>
            <td>Last Name</td>
            <td>Address</td>
        </tr>
    </table>
</root>

如果我们成功找到 H3 元素,我们可以通过向后遍历树来完成此操作,然后转到下一个 tr。

//table//h3/../../../tr/td[1]

将返回

<td colspan="4">
<h3>IM THE IMPORTANT TABLE!</h3>
</td>
-----------------------
<td>123456789</td>
于 2013-06-18T03:28:14.257 回答