9 つのテーブル行がありますが、DOMXpath を使用して最上位ノードにクエリを実行すると、3 つしか返されません。
<table class="something">
<tbody>
<tr>
<td class="label">One</td>
<td>111111</td>
</tr>
<tr>
<td class="label">Two</td>
<td>1454</td>
</tr>
<tr>
<td class="label">Three</td>
<td></td>
</tr>
<tr>
<td class="label">Four</td>
<td>0</td>
</tr>
<tr>
<td class="label">Five</td>
<td>45</td>
</tr>
<tr>
<td class="label">Six</td>
<td>45</td>
</tr>
<tr>
<td class="label">Seven</td>
<td>5</td>
</tr>
<tr>
<td class="label">Eight</td>
<td>0</td>
</tr>
<tr>
<td class="label">Nine</td>
<td>0</td>
</tr>
</tbody>
</table>
DOMDocument を使用して HTML を読み込みます。
$doc = new DOMDocument;
@$doc->loadHTML($htmlData);
$xpath = new DOMXpath($doc);
$tableRows = $xpath->query('//table[@class="something"]//tr');
残念ながら、テーブル行の完全なセットは返されず、最初の 3 行のみが返されます。<td></td>
空の要素が何らかの形で xpath パーサーから外れていると思います。これに対する解決策はありますか?
編集:
DOMXpath を使用せずに別のアプローチを試みています。
$request = drupal_http_request($url);
$data = $request->data;
$doc = new DOMDocument;
@$doc->loadHTML($data);
$tables = $doc->getElementsByTagName('table');
$rows = $tables->item(2)->getElementsByTagName('tr');
$output = '';
foreach($rows as $row) {
$cols = $row->getElementsByTagName('td');
foreach($cols as $col){
$output .= $col->nodeValue . '<br/>';
}
}
return $output;
どちらの方法でも、次の HTML が出力されます。
<div class="content">
One<br>111111<br>Two<br>1454<br>Three<br><br>
</div>
最初の例では、$tableRows->length は 3 で、出力と一致していますが、9 行のマークアップとは一致していません。