打开文件并删除第一个标签

时间:2012-04-03 08:59:44

标签: php file tags

这将是一个HTML文件:

<li class="msgln">hello</li><li class="msgln">hi</li><li class="msgln">hey</li>

和PHP脚本:

$fp = fopen("file.html", 'a');
....
fclose($fp);

如何删除第一个<li class="msgln">hello</li>

<li>中的内容已动态更改

5 个答案:

答案 0 :(得分:2)

即使第一个li包含其他嵌套li s,这也会有效:

<?php
$doc = new DOMDocument();
$doc->loadHTML('<li class="msgln">hello</li><li class="msgln">hi</li><li class="msgln">hey</li>
');

$root = $doc->documentElement;
$p = $doc->documentElement->childNodes->item(0)->childNodes;
$li = $doc->getElementsByTagName('li')->item(0);
$li->parentNode->removeChild($li);

$html = '';
foreach ($root->childNodes->item(0)->childNodes as $child) {
    $html .= $doc->saveXML($child);
}
echo $html;

?>

使用regex可能会导致意外结果。

答案 1 :(得分:1)

您可以使用preg_replace来实现此目标:

$html = file_get_contents('file.html');
$html = preg_replace('#^<li[^>]*>[^<]+</li>#i', '', $html); 

答案 2 :(得分:1)

如果文件的内容与描述完全相同,那么您可以使用strip_tags(),例如:

$fp = fopen("file.html", 'a');
$content = fread($fp);
$content = strip_tags($content);
fclose($fp);

或者你可以使用正则表达式,但这会慢一些。

答案 3 :(得分:1)

$fp = fopen("file.html", 'a');
$content = fread($fp);
$text = preg_replace( "/<li.+?>.+?<\/li>/is", "", $content, 1 );
fclose($fp);

答案 4 :(得分:0)

试试这个(没有正则表达式)

//string contains the file value
$string = '<li class="msgln">hello</li><li class="msgln">hi</li><li class="msgln">hey</li>';

$tag = '</li>';

$lis = explode($tag, $string);

if(count($lis) > 0) {
    unset($lis[0]);
    $string = implode($tag, $lis);
}