首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用标签的id剥离标签及其内部的所有html?

如何使用标签的id剥离标签及其内部的所有html?
EN

Stack Overflow用户
提问于 2010-07-22 19:56:53
回答 7查看 56.7K关注 0票数 21

我有以下html:

代码语言:javascript
复制
<html>
 <body>
 bla bla bla bla
  <div id="myDiv"> 
         more text
      <div id="anotherDiv">
           And even more text
      </div>
  </div>

  bla bla bla
 </body>
</html>

我想删除从<div id="anotherDiv">开始直到其关闭的<div>为止的所有内容。我该怎么做?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-07-22 20:10:01

使用native DOM

代码语言:javascript
复制
$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$xPath = new DOMXPath($dom);
$nodes = $xPath->query('//*[@id="anotherDiv"]');
if($nodes->item(0)) {
    $nodes->item(0)->parentNode->removeChild($nodes->item(0));
}
echo $dom->saveHTML();
票数 34
EN

Stack Overflow用户

发布于 2010-07-22 20:00:57

您可以像这样使用preg_replace()

代码语言:javascript
复制
$string = preg_replace('/<div id="someid"[^>]+\>/i', "", $string);
票数 14
EN

Stack Overflow用户

发布于 2015-07-13 18:09:35

使用本机XML Manipulation Library

假设您的html内容存储在变量$html中:

代码语言:javascript
复制
$html='<html>
 <body>
 bla bla bla bla
  <div id="myDiv"> 
         more text
      <div id="anotherDiv">
           And even more text
      </div>
  </div>

  bla bla bla
 </body>
</html>';

要按ID删除标记,请使用以下代码:

代码语言:javascript
复制
    $dom=new DOMDocument;

    $dom->validateOnParse = false;

    $dom->loadHTML( $html );

    // get the tag

    $div = $dom->getElementById('anotherDiv');

   // delete the tag

    if( $div && $div->nodeType==XML_ELEMENT_NODE ){

        $div->parentNode->removeChild( $div );
    }

    echo $dom->saveHTML();

请注意,某些版本的libxml要求存在doctype才能使用getElementById方法。

在这种情况下,您可以在$html前面加上<!doctype>

代码语言:javascript
复制
$html = '<!doctype>' . $html;

或者,正如戈登的回答所建议的,您可以使用DOMXPath通过xpath来查找元素:

代码语言:javascript
复制
$dom=new DOMDocument;

$dom->validateOnParse = false;

$dom->loadHTML( $html );

$xp=new DOMXPath( $dom );

$col = $xp->query( '//div[ @id="anotherDiv" ]' );

if( !empty( $col ) ){

    foreach( $col as $node ){

        $node->parentNode->removeChild( $node );

    }

}

echo $dom->saveHTML();

无论标签是什么,第一种方法都可以工作。如果您想使用具有相同id但不同标记的第二种方法,例如form,只需将//div[ @id="anotherDiv" ]中的//div替换为“//form

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3308530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档