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