2016-05-09 1 views
0

Я извлекаю страницу, которая представляет собой страницу с некоторыми тегами стиля, таблицей и другим неживым содержимым. Я храню это в переходном процессе, и извлечение все это с помощью AJAXУдаление ненужных элементов из таблицы simple_html_dom

$result_match = file_get_contents('www.example.com'); 

set_transient('match_results_details', $result_match, 60 * 60 * 12); 

$match_results = get_transient('match_results_details'); 

if ($match_results != '') { 

    $html = new simple_html_dom(); 
    $html->load($match_results); 

    $out = ''; 

    $out .= '<div class="match_info_container">'; 
    if (!empty($html) && is_object($html)) { 
     foreach ($html->find('table') as $table => $table_value) { 
      $out .= preg_replace('/href="?([^">]+)"/', '', $table_value); 
     } 
    } 
    $out .= '</div>'; 

    wp_die ($out); 

} else { 
    $no_match_info = esc_html__('No info available', 'kompisligan'); 
    wp_die($no_match_info); 
} 

Теперь таблица была якорей и мне нужно удалить, так что я использовал preg_replace, чтобы найти якорь и очистить его. Я знаю, что вы можете манипулировать содержимым с помощью метода find(), но я не имел успеха в этом.

Теперь я хотел бы избавиться от всего тега <tfoot> и того, что он содержит.

Но каждый раз, когда я пытаюсь «найти» что-то, ajax возвращает ошибку, что означает, что что-то в моем коде неверно.

Как управлять содержимым уже найденного элемента с помощью simple_html_dom? Я попытался вывести содержимое $html, чтобы я мог видеть, что я выйду, но мой вызов AJAX длится вечно, и я не могу его вытащить.

+0

Почему бы не использовать DOMDocument по умолчанию с PHP, это то, что я использую, чтобы снести некоторые HTML-страницы перед их обслуживанием. Он очень прост в использовании. Для удаления tfoot это будет '$ tfoot = $ dom-> getElementsByTagName ('tfoot'); if ($ tfoot! == null) $ tfoot-> parentNode-> removeChild ($ tfoot); '. – Kalkran

ответ

1

Вы можете попробовать это, используя встроенный DOMDocument вместо simple_html_dom. Однако, если ваш вызов Ajax синхронизирован, это может быть другой проблемой (не имея возможности загрузить example.com или так).

if ($match_results != '') { 

    $html = new DOMDocument(); 
    // Suppress errors 
    @$html->loadHTML($match_results); 

    $out = '<div class="match_info_container">'; 

    // Remove all "href" tags from <a> 
    foreach($html->getElementsByTagName('a') as $href) 
     $href->setAttribute('href', ''); 

    // Remove Tfoot 
    foreach($html->getElementsByTagName('tfoot') as $tfoot) 
     $tfoot->parentNode->removeChild($tfoot); 

    // Put the contents of every <table> in the div. 
    foreach($html->getElementsByTagName('table') as $table) 
     $out .= $table->nodeValue; 


    $out .= '</div>'; 




    wp_die ($out); 

} else { 
+0

Хммм, я попробую это. Благодаря! –

+0

Это классно, но могу ли я получить значения таблицы в некоторых оболочках? Поскольку этот способ в моих 'nodeValue' и' textContent' является моими данными, но выводится как есть. Как я могу различать данные в таблице? –

+0

Мне удалось получить информацию (теперь мне нужно проверить, правильно ли я сохранил свои данные), путем «форсирования» элементов по имени тега, таргетинга на их элементы из каждой таблицы, дочерних узлов, элементов и т. Д. Спасибо за начало:) –

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