Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP文档:删除元素_Php_Dom - Fatal编程技术网

PHP文档:删除元素

PHP文档:删除元素,php,dom,Php,Dom,我正在尝试删除一类HTML代码。但这不管用。我的问题是我不知道如何删除特定的。我只有一个错误: 传递给DOMXPath::_construct()的参数1必须是DOMDocument的实例,字符串在 它的HTML结构: 要删除的文本 Lorem Ipsum只是印刷和排版行业的虚拟文本。自16世纪以来,Lorem Ipsum一直是行业标准的虚拟文本,当时一位不知名的印刷商拿起一个打印工具,将其拼凑成一本打印样本书。它不仅存活了五个世纪,而且还跨越到电子排版,基本上保持不变。它在20世纪60年代

我正在尝试删除一类HTML代码。但这不管用。我的问题是我不知道如何删除特定的
。我只有一个错误:

传递给DOMXPath::_construct()的参数1必须是DOMDocument的实例,字符串在

它的HTML结构:


要删除的文本
Lorem Ipsum只是印刷和排版行业的虚拟文本。自16世纪以来,Lorem Ipsum一直是行业标准的虚拟文本,当时一位不知名的印刷商拿起一个打印工具,将其拼凑成一本打印样本书。它不仅存活了五个世纪,而且还跨越到电子排版,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件的发布,包括Lorem Ipsum版本。
GR(“布拉布拉”、“中心”);

与流行的观点相反,Lorem Ipsum不是简单的随机文本。它起源于公元前45年的一段古典拉丁文学,距今已有2000多年的历史。弗吉尼亚州汉普顿悉尼学院的拉丁语教授理查德·麦克林托克(Richard McClintock)从《洛伦·伊普斯姆》(Lorem Ipsum)一段中查找了一个更为晦涩的拉丁语单词,即“Concertetur”,并查阅了古典文学中对该词的引用,发现了该词无可置疑的来源。Lorem Ipsum来自西塞罗于公元前45年所著《德菲尼布斯·博诺勒姆和马洛勒姆》(善与恶的极端)的第1.10.32节和第1.10.33节。这本书是一本关于伦理学理论的论文,在文艺复兴时期非常流行。Lorem Ipsum的第一行“Lorem Ipsum dolor sit amet..”来自第1.10.32节中的一行。

正文

//删除以下所有内容
*
*
*
对代码的主要误解是
DOMXPath
init。您将
的HTML呈现为
$before
变量,然后尝试实例化一个
DOMXPath
$before
传递为参数:
DOMXPath
参数必须是一个,但您传递的是一个字符串(呈现的HTML)

要正确初始化
DOMXPath
,必须将其本身作为参数
$dom
传递,并且可以在将HTML加载到
$dom
对象之后初始化它一次。无需为每个节点创建新的
DOMXPath

附带错误:在代码末尾尝试呈现
的HTML时出现的语法错误。使用以下语法:
renderedHTLM->saveHTML(renderedHTML->documentElement)
而不是正确的语法:
DOMDocumentObj->saveHTML(DOMElementContext)
。您必须在
$dom->saveHTML($div)

因此,您可以通过以下方式更改代码:

$ht = file_get_contents( 'http://localhost:8080/lesson/test17.html' );
$dom = new DOMDocument();
libxml_use_internal_errors( true );
$dom->loadHTML( $ht );

$selector = new DOMXPath( $dom );                                   // <----

$divs = $dom->getElementsByTagName('section');

foreach( $divs as $div )
{
    if( $div->getAttribute( 'id' ) == 'tresc' ) 
    {
        foreach($selector->query( '//div[contains(attribute::class, "todelete1")]' ) as $e ) 
        {
            $e->parentNode->removeChild($e);
        }
        echo $dom->saveHTML( $div );                                // <----
    }
}
$div = $dom->getElementById( 'tresc' );
$div->parentNode->removeChild( $div );

  • 了解更多关于
  • 了解更多关于

thx@fusion3k它工作得很好。我删除了所有
,但我还有最后一个问题,如何删除所有
a
img
我知道的代码选择器是
strip_tags
,但这个函数为我的示例留下了文本

删除4、删除5、删除6

$divs=$dom->getElementsByTagName('section');
foreach($div作为$div)
{
如果($div->getAttribute('id')=='tresc')
{
foreach($selector->query('//div[contains(attribute::class,“todelete1”)])作为$e)
{
$e->parentNode->removeChild($e);
}
foreach($selector->query('//div[contains(attribute::class,“todelete2”)])作为$f)
{
$f->parentNode->removeChild($f);
}
foreach($selector->query('//a[包含(属性::href,“]”)为$g)
{
$g->parentNode->removeChild($g);
}
echo$dom->saveHTML($div);

thx

'div with class todelete1,todelete2 and all links bellow'-是否要删除所有节的内容?是否有原因不能从html文件本身删除未使用的标记?@RomanPerekhrest Yes only text i想要“Lorem Ipsum…”和“
与流行的想法相反…”@Frederik.L我无法手动从文件中删除未使用的标记,因为我了解了如何从代码html中删除div或其他标记,我想知道如何做。好的,我找到;)
foreach($selector->query('//a')as$g){$g->parentNode->removeChild($g);}