2015-11-16 4 views
1

Я пытаюсь получить таблицу с определенным URL-адресом по его идентификатору. Мой метод получает необработанный HTML-код из URL-адреса, преобразовывая его в удобочитаемый DOM для PHP и затем находя таблицу через запрос.Как получить таблицу по ID из URL?

Результаты нижеследующего кода: $elements всегда пусто (длина 0).

<?php 
    $c = curl_init('http://www.urlhere.com/'); 
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 

    $html = curl_exec($c); 

    if (curl_error($c)) 
     die(curl_error($c)); 

    curl_close($c); 

    $dom = new DOMDocument(); 
    $dom->loadHTML($html); 

    $xpath = new DOMXpath($dom); 

    $elements = $xpath->query("*/table[@id=anyid]"); 

    if (!is_null($elements)) { 
     foreach ($elements as $element) { 
      echo "<br/>[". $element->nodeName. "]"; 

      $nodes = $element->childNodes; 
      foreach ($nodes as $node) { 
       echo $node->nodeValue. "\n"; 
      } 
     } 
    } 
?> 

Как я могу сделать эту таблицу успешно на моей странице?


EDIT:

Фрагмент из HTML Я пытаюсь получить, взятый непосредственно из $html переменной:

<div></div><table class=sortable id=anyid></table>

+0

добавить цитаты '@ ID = 'anyid'' и убедитесь, что на самом деле загружается на начальном этапе, если его создатель через JS, тогда вы не можете получить это с этим. – Ghost

+0

@Ghost - я уверен, что он загружен изначально, так как он существует в переменной '$ html'. Я попытался добавить цитаты, хотя это тоже не сработало. – Fizzix

+0

не так много, если '$ html' действительно является строкой разметки html, должен [работать] (http://codepad.viper-7.com/oV2zmS) – Ghost

ответ

1

Чтобы продолжить на комментарии, вы могли бы скрыть эти ошибки в первую очередь:

libxml_use_internal_errors(true); 
$dom->loadHTML($html); 
libxml_clear_errors(); 

В этом обсуждении подробно рассмотрены here.

Затем, чтобы применить его, просто добавьте его в код:

$dom = new DOMDocument(); 
libxml_use_internal_errors(true); 
$dom->loadHTML($html); 
libxml_clear_errors(); 

$xpath = new DOMXpath($dom); 

$elements = $xpath->query("//table[@id='anyid']"); 

if (!is_null($elements)) { 
    foreach ($elements as $element) { 
    echo "<br/>[". $element->nodeName. "]"; 

    $nodes = $element->childNodes; 
    foreach ($nodes as $node) { 
     echo $node->nodeValue. "\n"; 
    } 
    } 
} 

Sample Output

+0

Выглядит хорошо, спасибо Призрак. Хотя таблица, похоже, просто отображает текст вместо таблицы как HTML. Вы знаете, как визуализировать таблицу как HTML вместе со всеми 'td's и' tr's? – Fizzix

+1

Удалось решить это с помощью '$ htmlString = $ dom-> saveHTML ($ elements-> item (0));' – Fizzix

Смежные вопросы