php - 解析 HTML 并删除特定的 td

标签 php dom xpath

我有如下所示的 html 内容...

<table>
  <tr>
    <td>xyx...</td>
    <td>abc....</td>
    <td><span><h3>Downloads</h3></span><br>blah blah blah...</td>
  </tr>
  <tr>
    <td><h3>Downloads</h3>again some content.</td>
    <td>dddd</td>
    <td>kkkl...</td>
  </tr>
</table>

现在,如果内容中的任何位置有“下载”一词,我将尝试删除“td”。经过在互联网上的一些研究后,我可以执行一些东西,代码如下......

$res_text = 'MY HTML';

# Create a DOM parser object
$dom = new DOMDocument();

# Parse the HTML from Google.
# The @ before the method call suppresses any warnings that
# loadHTML might throw because of invalid HTML in the page.
@$dom->loadHTML($res_text);         

$selector = new DOMXPath($dom);


$results = $selector->query('//*[text()[contains(.,"Downloads")]]');

if($results->length){
    foreach($results as $res){
        $res->parentNode->removeChild($res);
    }
}

这确实会删除单词“Downloads”及其当前父节点 <span><p> ,但我想要整个<td>应与内容一起删除。

我试过了...

$results = $selector->query('//td[text()[contains(.,"Downloads")]]');

但它不起作用。有人可以告诉我怎样才能得到它吗?

最佳答案

您的查询中不需要 text(),它应该是:

$results = $selector->query('//td[contains(.,"Downloads")]');

整个代码:

$dom = new DOMDocument();
$dom->loadHTML($res_text);
$selector = new DOMXPath($dom);
$results = $selector->query('//td[contains(.,"Downloads")]');
if($results->length){
   foreach($results as $res){
           $res->parentNode->removeChild($res);
    }
}

echo htmlentities($dom->saveHTML());

<强> DEMO

关于php - 解析 HTML 并删除特定的 td,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23729933/

相关文章:

php - 从 ajax 加载的脚本访问 JavaScript 函数

php - 如何在 Laravel 中构建基于条件的查询?

javascript - 获取 ajax 响应中 JS 对象的引用

javascript - POST-GET session 变量 (javascript-php) -javascript 采用前一个变量,但不是最后创建的变量

php - 通过查询获取 MySQL GROUP 中的最后一个

javascript - 如何通过 Javascript/JQuery 重新排序 HTML

firefox - 如何在 Firefox 中转储当前状态的整个 Web DOM?

java - 为什么我的程序的行为仅仅基于 Maven 依赖而改变?

Python- Selenium : How to click on the element with text as "Year" within the webpage

python - 使用 xpath 获取文章文本但省略一些标签