xpathTables.html
次のようなHTMLドキュメントがあるとします。
<html>
<body>
<table>
<tbody>
<tr><td class="body" valign="top"><a href="example"><b>DATA</b></a></td><td class="body" valign="top">Data_Text</td></tr>
</tbody>
</table>
<table>
<tbody>
<tr><th><div id="Data">Data</div></th><td>Data_Text_1</td><td>Data_Text_2</td></tr>
</tbody>
</table>
<table>
<tbody>
<tr><td width="120"><a href="example" target="_blank">DATA</a></td><td>Data_Text</td></tr>
</tbody>
</table>
</body>
</html>
そしてこのPHPスクリプト:
<?php
$link = "xpathTables.html";
$html = file_get_contents($link);
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$tables = $doc->getElementsByTagName('table');
$nodes = $xpath->query('.//tbody/tr/td/a/b', $tables->item(0));
var_dump($nodes->item(0)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td[@class="body"]', $tables->item(0));
var_dump($nodes->item(1)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/th/div[@id="Data"]', $tables->item(1));
var_dump($nodes->item(0)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td', $tables->item(1));
var_dump($nodes->item(0)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td', $tables->item(1));
var_dump($nodes->item(1)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td/a', $tables->item(2));
var_dump($nodes->item(0)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td', $tables->item(2));
var_dump($nodes->item(1)->nodeValue);
次の出力が得られます。
string(4) "DATA"
string(9) "Data_Text"
string(4) "Data"
string(11) "Data_Text_1"
string(11) "Data_Text_2"
string(4) "DATA"
string(9) "Data_Text"
私はあなたの質問をよく理解していなかったので、あなたのテーブルが持っているすべてのテキストノードを示すためにこの例を作りました。これらのノードの一部にのみ関心がある場合は、そのジョブを実行するXPathクエリを選択する必要があります。
例をよりHTMLのようにするために、タグtable
とを含めました。tbody