我正在尝试解析html表,以便使用Xpath和PHP获取<td>
ID HERE </td>
标记内容。
执行以下行
$doc->loadHTMLFile($file);
给我这样的警告:
PHP警告:DOMDocument :: loadHTMLFile():意外的结束标记:tr in ...
这就是我使用以下代码块的原因:
libxml_use_internal_errors(true);
$doc->loadHTMLFile($file);
libxml_clear_errors();
尝试解析此问题:(整个页面here)
<table class="object-table" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<th width="8%">something here</th>
<th width="89%">something here</th>
<th width="3%">something here</th>
</tr>
<tr class="normal-row">
<td>ID number here</td>
<td><a href="/catalog/view/id/4127">something here</a>
</td>
<td align="center">
<img src="/design/img/hasnt_photo_icon.gif">
</td>
</tr>
<tr class="odd-row">
<td>ID number here</td>
<td><a href="/catalog/view/id/1865">something here</a>
</td>
<td align="center">
<img src="/design/img/hasnt_photo_icon.gif">
</td>
</tr>
</tbody>
</table>
使用以下代码:
$file = "http://www.sportsporudy.gov.ua/catalog/#c[1]=1";
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTMLFile($file);
libxml_clear_errors();
$xpath = new DOMXPath($doc);
$query = '//tr[@class="odd-row"]';
$elements = $xpath->query($query);
printf("Size of array: %d\n", sizeof($elements));
printElements($elements);
尝试使用不同的查询
//table[@class="object-table"]/tbody/tr
...
但似乎没有给我我需要的标签。也许那是因为破坏了HTML。
感谢您的建议。
答案 0 :(得分:0)
基本上,你的代码很好。
我发现的唯一错误是打印$elements
长度:$elements
不是数组,要检索其长度,您必须使用以下语法:
printf( "Size of array: %d\n", $elements->length );
但是你对页面的主要问题是HTML只有一个表有一行:剩下的数据用javascript填充,所以你不能直接通过DOMXPath检索它。