【问题标题】:Extracting parts of an html code提取部分 html 代码
【发布时间】:2014-04-24 10:16:12
【问题描述】:

假设我有以下 HTML 代码:

<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 代码
  • 甚至可以有两个带有“block”类的 div 块

我使用 PHP 的 XPath 来查看使用 DOM 的 HTML 代码。我希望能够返回两件事:

  1. “块”类的 div 块
  2. 其余所有代码都没有包含“block”类的 div 元素

类似:

块代码:

<div class="block">
    <img src="test2.jpg">
</div>

原版无块码:

<p>Test text</p>
<p><img src="test.jpg" /></p>
<div id="test"><p>test</p></div>
<p>test</p>

【问题讨论】:

    标签: php html parsing xpath


    【解决方案1】:

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

    $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>';
    

    输出“块代码”:

    <div class="block"><img src="test2.jpg"></div>
    

    还有“原版无块码”:

    <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 并用:

    echo DOMinnerHTML($doc->getElementsByTagName('body')->item(0));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 2016-06-05
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      相关资源
      最近更新 更多