我有如下所示的 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/