【问题标题】:Extract Html Contents in a Certain Tag without the Outer Tag in PHP在PHP中提取没有外部标签的某个标签中的Html内容
【发布时间】:2012-08-24 09:39:08
【问题描述】:

我想检索某个标签中的 html 代码。我知道 DomDocument 可以做到这一点。但是,如果我想提取没有外层标签的内容,如何实现呢?

例如,

$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';    
$doc = new DOMDocument;
$doc->loadHTML($html);
echo $doc->saveXML($doc->getElementsByTagName('div')->item(0));

这将输出,

<div>
    <span>Hello world!</span>
    <br>
    <p>some other text</p>
</div>

我想要它没有外部 div 标签。我尝试了节点值,但它剥离了所有标签。

$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';    
$doc = new DOMDocument;
$doc->loadHTML($html);
$node = $doc->getElementsByTagName('div')->item(0);
echo $node->nodeValue;

有什么想法吗?

【问题讨论】:

  • 您的要求实际上没有意义,您要求标签及其内容,但随后您说您不想要标签。既然你知道你要的是什么标签,你可以用正则表达式简单地删除它,或者你可以简单地选择你想要的标签,不介意有外部标签。
  • 您的问题答对了。这意味着这个问题是有道理的。如果您认为这很简单,您可以发布解决方案吗?
  • 我同意这是有道理的,有时我会忘记自己。我已经发布了一个适合你的解决方案。

标签: php web-scraping domdocument html


【解决方案1】:

好吧,PHP innerHTML 实现怎么样:

<?php 
$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';    
$doc = new DOMDocument;
$doc->loadHTML($html);
$node = $doc->getElementsByTagName('div')->item(0);
echo DOMinnerHTML($node);

function DOMinnerHTML($element) 
{ 
    $innerHTML = ""; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
        $tmp_dom = new DOMDocument(); 
        $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
        $innerHTML.=trim($tmp_dom->saveHTML()); 
    } 
    return $innerHTML; 
} 
?> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多