从表simple_html_dom中删除不需要的元素

时间:2016-05-09 11:17:57

标签: php simple-html-dom

我正在获取一个页面,该页面包含一些样式标签,表格和其他非重要内容。我将它存储在瞬态中,并使用AJAX

获取所有内容
$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通话会永远存在,我无法解决它。

1 个答案:

答案 0 :(得分: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 {