首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取html代码的部分

提取html代码的部分
EN

Stack Overflow用户
提问于 2014-03-18 15:48:33
回答 1查看 45关注 0票数 0

假设我有以下HTML代码:

代码语言:javascript
复制
<p>Test text</p>
<p><img src="test.jpg" /></p>
<div id="test"><p>test</p></div>
<div class="block">
    <img src="test2.jpg">
</div>
<p>test</p>

参数:

  • 将存在一个带有“块”类的div块。
  • 在div块上面或下面可以有任意数量的HTML代码,类“块”。
  • 甚至可以有两个带有类块的div块。

我使用PHP的XPath来查看这个使用DOM的HTML代码。我想归还两件东西:

  1. 类“块”的div块
  2. 所有其他没有div元素的代码,其中包含“块”类。

类似于:

块状代码:

代码语言:javascript
复制
<div class="block">
    <img src="test2.jpg">
</div>

原件,不带块代码:

代码语言:javascript
复制
<p>Test text</p>
<p><img src="test.jpg" /></p>
<div id="test"><p>test</p></div>
<p>test</p>
EN

回答 1

Stack Overflow用户

发布于 2014-03-18 16:15:32

通过使用DOMDocument,您可以这样做:

代码语言:javascript
复制
$content = '<p>Test text</p>'.
        '<p><img src="test.jpg" /></p>'.
        '<div id="test"><p>test</p></div>'.
        '<div class="block">'.
        '<img src="test2.jpg">'.
        '</div>'.
        '<p>test</p>';

$blocks = array();
$doc = new DOMDocument();
$doc->loadHTML($content);

$elements = $doc->getElementsByTagName("*");
foreach ($elements as $element) {
    if($element->hasAttributes()) {
        if ($element->getAttribute('class') == 'block') {
            //add block HTML to block array
            $blocks[]=$doc->saveHTML($element);
            //remove blocck element
            $element->parentNode->removeChild($element);
        }
    }
}

echo '<pre>';
echo $blocks[0]; //iterate or print_r if multiple blocks
echo $doc->saveHTML();
echo '</pre>';

输出“块代码”:

代码语言:javascript
复制
<div class="block"><img src="test2.jpg"></div>

和“原始无块代码”:

代码语言:javascript
复制
<p>Test text</p><p><img src="test.jpg"></p><div id="test"><p>test</p></div><p>test</p>

如果您根本不能接受DOMDocument用doctype、HTML和body“丰富”html,这在您想要完整的文档时会非常烦人,而不仅仅是一些摘录,您可以使用以下方法来use this neat function和提取innerHTML:

代码语言:javascript
复制
echo DOMinnerHTML($doc->getElementsByTagName('body')->item(0));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22484346

复制
相关文章

相似问题

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