如何使用PHP删除html片段字符串中的选定节点?

时间:2014-02-09 18:42:54

标签: php html

如何使用PHP获取以下html字符串:

$html ="<div><table><tbody><tr>
<td>
<a>Item1</a>
</td>
<td>
<a id="item2">Item2</a>
</td>
<td>
<a>Item3</a>
</td>
</tr></tbody></table></div>";

并删除包含id="item2"

元素的td节点

具有目标id(item2)的元素也可以具有其他属性,并且td parent可以在其​​下具有其他节点。我想完全删除td及其下面的所有内容,如果它包含一个id =我目标的元素。

我花了一个小时用DOMdocument和类似的php函数尝试各种各样的事情,但我只是让自己感到困惑。

删除td节点后,我希望html字符串返回原始变量$html

在不产生任何错误或警告的情况下,最简单的方法是什么?

2 个答案:

答案 0 :(得分:1)

你可以使用正则表达式:

print_r(preg_replace('#<[^>]+ id="item2">[^<]+</[^>]+>#i', '', $html));

现在正在更新正则表达式,你可以用$ item复制item2,希望它可以非常动态

重试它我更新了它,在php我们必须使用##围绕正则表达式而不是//,对不起

上次更新:

print_r(preg_replace('#<[^>]+>[^<]*<[^>]+ id="item2"[^>]*>[^<]+</[^>]+>[^<]*</[^>]+>#i', '', $html));

答案 1 :(得分:1)

使用PHP的DOMDocument来解析字符串并删除节点。例如:

$dom = new DOMDocument();
$dom->loadHTML($html);
$target_node = $dom->getElementById('item2');
$target_node->parentNode->removeChild($target_node);
$new_html = $dom->saveHTML();