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 のフォーマットを修正したら、ドキュメント ツリーをたどることができます。

XPATH

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>

したがって、ドキュメントに複数のテーブルを追加し、任意のテーブルの各要素に対して複数の結果を見つけたい場合、これは非常に簡単です。'root' 要素などの親要素内に多くのテーブルを含む 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 式を使用して、すべてのテーブルの各 2 行目の最初のテーブル データの数を抽出できます。

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

これにより、次の結果が得られます

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

ここで、いくつかのテーブルがあるとしますが、1 つのテーブルだけが非常に重要であり、テーブルには H3 要素が必要であり、他の要素は重要ではありません。このテーブルに H3 要素がある場合、2 番目の行を抽出したいとします。最初の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 に答える