PHP DOMDocument,只检索div的内容,没有div标签

时间:2013-04-15 08:32:03

标签: php domdocument

我正在使用DOMDocument在HTML页面上检索一个特殊的div。

我只想在不使用div标签的情况下检索此div的内容。

例如:

$dom = new DOMDocument;
$dom->loadHTML($webtext['content']);
$main = $dom->getElementById('inter');
$dom->saveHTML()

在这里,我有结果:

<div id="inter">
//SOME THINGS IN MY DIV
</div>

我只想拥有:

//SOME THINGS IN MY DIV

想法?谢谢!

3 个答案:

答案 0 :(得分:5)

我会用简单的方法去做。你已经拥有:

$dom = new DOMDocument;
$dom->loadHTML($webtext['content']);
$main = $dom->getElementById('inter');
$dom->saveHTML();

现在,DOMDocument::getElementById()返回一个 DOMElement,其中DOMNode扩展为public string nodeValue 。由于您没有指定除了div内的文本之外是否还有任何文本,我将假设您希望任何可能以纯文本形式存储在其中的内容。为此,我们将删除$dom->saveHTML();,而是将其替换为:

$divString = $main->nodeValue;

有了这个,$divString将包含//SOME THINGS IN MY DIV,从您的示例中,它是所需的输出。

但是,如果您想要其内部的HTML而不仅仅是String表示形式 - 请将其替换为以下内容:

$divString = "";
foreach($main->childNodes as $c) 
    $divString .= $c->ownerDocument->saveXML($c);

它的作用是利用包含DOMNode::childNodes的继承DOMNodeList,每个DOMDocument包含自己的DOMNode(供参考,见上文),然后我们循环遍历每个ownerDocument }这是DOMDocument::saveXML(),我们称之为{{3}}函数。我们将当前$c节点传递给函数的原因是为了防止输出整个有效文档,并且因为ownerDocument是我们正在循环的 - 我们需要让一个孩子在时间,没有孩子留下。 (对不起,已经很晚了,无法抗拒。)

现在,在任一选项之后,您可以使用$divString做什么。我希望这有助于向您解释这个过程,并希望您能够更好地了解正在发生的事情,而不是仅仅因为它起作用而对代码进行死记硬背。 ^^

答案 1 :(得分:0)

您可以使用xpath

 $xpath = new DOMXPath($xml);

foreach($xpath->query('//div[@id="inter"]/*') as $node)
{
  $node->nodeValue
}

或简单地说,你可以编辑你的代码。 see here

$main = $dom->getElementById('inter');

echo  $main->nodeValue

答案 2 :(得分:0)

您可以使用我的自定义功能从内容中删除额外的div

    $html_string = '<div id="inter">
        SOME THINGS IN MY DIV
    </div>';

//自定义功能

function DOMgetinnerHTML($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; 
}

你的代码会喜欢

$dom = new DOMDocument;
$dom->loadHTML($html_string);
$divs = $dom->getElementsByTagName('div');
$innerHTML_contents = DOMgetinnerHTML($divs->item(0));
echo $innerHTML_contents

,您的输出将

SOME THINGS IN MY DIV