现在已经尝试了将近一个小时。尽管每个人都坚持使用DOMDocument处理XML / HTML是多么容易和直接,但我找不到合适的答案。
如何从这个简单的html中删除元素id = delete_me?
fopen
所以结果只是
<div class="something">
important stuff
<div id="delete_me">
not so important stuff, better delete me
</div>
</div>
我不会那么困难。每次我必须使用DOMDocument时,我都会疯了。
这是一个如此简单的问题和日常任务,但仍然无法找到可行的解决方案。
非常感谢帮助。
答案 0 :(得分:2)
libxml
的某些版本需要存在doctype才能使getElementById
正常工作,因此这里采用相当“hacky”的方法会略微欺骗libxml。
$doc='<!doctype>';
$html='
<div class="something">
important stuff
<div id="delete_me">
not so important stuff, better delete me
</div>
</div>';
/* append the doctype */
$html=$doc . $html;
$dom=new DOMDocument;
$dom->validateOnParse = false;
$dom->loadHTML( $html );
/* get the element to be deleted */
$div=$dom->getElementById('delete_me');
/* delete the node */
if( $div && $div->nodeType==XML_ELEMENT_NODE ){
$div->parentNode->removeChild( $div );
}
echo $dom->saveHTML();
$dom=null;
或者使用DOMXPath
通过查询id并删除来查找元素。
$html='
<div class="something">
important stuff
<div id="delete_me">
not so important stuff, better delete me
</div>
</div>';
$dom=new DOMDocument;
$dom->validateOnParse = false;
$dom->loadHTML( $html );
$xp=new DOMXPath( $dom );
$col = $xp->query( '//div[ @id="delete_me" ]' );
if( !empty( $col ) ){
foreach( $col as $node ){
$node->parentNode->removeChild( $node );
}
}
echo $dom->saveHTML();
$dom=null;