XPath PHP解析HTML表标签

时间:2016-02-22 12:10:00

标签: php html xpath

我正在尝试解析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。

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

基本上,你的代码很好。

我发现的唯一错误是打印$elements长度:$elements不是数组,要检索其长度,您必须使用以下语法:

printf( "Size of array: %d\n", $elements->length );

但是你对页面的主要问题是HTML只有一个表有一行:剩下的数据用javascript填充,所以你不能直接通过DOMXPath检索它。