2012-12-18 2 views
1

У меня есть локон сценарий, который заканчивается так:PHP - DOM, зачистка таблицы из HTML

$data = curl_exec($ch); 

    curl_close($ch); 

    return $data; 

} 

Строка данных $ это HTML-страница с таблицей, на котором я хочу раздеться, так что я могу хранить данные в базу данных MYSQL, я попытался с помощью DOM с такими командами, как:

// new dom object 
    $dom = new DOMDocument(); 

    //load the html 
    $html = str_get_html($returned_content2); 
    $dom->strictErrorChecking = false; 


    //discard white space 
    $dom->preserveWhiteSpace = false; 

    //the table by its tag name 
    $tables = $dom->getElementsByTagName('table'); 

    //get all rows from the table 
    $rows = $tables->item(0)->getElementsByTagName('tr'); 

    // loop over the table rows 
    foreach ($rows as $row) 
    { 
    // get each column by tag name 
     $cols = $row->getElementsByTagName('td'); 
    // echo the values 
     echo $cols->item(0)->nodeValue.'<br />'; 
     echo $cols->item(1)->nodeValue.'<br />'; 
     echo $cols->item(2)->nodeValue; 
    } 
} 

Но держать получаю ошибку:

Fatal error: Call to a member function getElementsByTagName() on a non-object in /home/sdsd/dfdsfsdfds/sdfsdfs/table.php on line 178

+1

Какая строка является строкой 178? – Stanley

+0

[Ссылка - что означает эта ошибка в PHP?] (Http://stackoverflow.com/q/12769982/367456) – hakre

+2

'str_get_html()' является частью simple_html_dom, я считаю, _not DOMDocument_. Вы хотите ['$ dom-loadHTML()'] (http://php.net/manual/en/domdocument.loadhtml.php) –

ответ

3

Вы не загружаете HTML-код в свой DOMDocument. Удалите эту строку

$html = str_get_html($returned_content2);

и поместите это после preserveWhiteSpace линии

$dom->loadHTML($returned_content2); 

Перед началом выборки строк таблицы, вы должны убедиться, что вы нашли хотя бы одну таблицу, например

$tables = $dom->getElementsByTagName('table'); 
if ($tables->length == 0) { 
    throw new Exception('No tables found'); 
} 
+0

Да, такая глупая ошибка! Должно быть потому, что его так поздно ночью ха-ха, спасибо за помощь, но до сих пор не получая результатов, которые я хотел, я добавил свой стол html на свой первый пост, если бы вы могли взглянуть? Спасибо –

1

Это довольно тривиально:

//get all rows from the table 
$rows = $tables->item(0)->getElementsByTagName('tr'); 
       ^^^^^^^ 

Когда у документа нет таблиц (например, пустой документ, поскольку вы ничего не загружаете в него), что ->item(0) действительно возвращает NULL. Значение NULL не имеет этого метода getElementsByTagName (это не объект), поэтому вы видите сообщение об ошибке.

Всякий раз, когда вы делаете что-то важное (или вы сталкиваетесь с ошибкой), выполните необходимые проверки предварительного условия. Например:

$tables = $dom->getElementsByTagName('table'); 
if (!$tables->length) { 
    throw new UnexpectedValueException('Table expected but not found.'); 
} 
+0

Да, я также добавлю, что, спасибо! –

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

  • Нет связанных вопросов^_^