1

我正在使用 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

想法?谢谢 !

4

3 回答 3

6

我将使用简单的方法。你已经有了:

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

现在,DOMDocument::getElementById()返回一个 DOMElementextendsDOMNode具有public stringnodeValue. 由于您没有指定除文本之外的任何内容div,因此我假设您想要任何可能以纯文本形式存储在其中的内容。为此,我们将删除$dom->saveHTML();,并将其替换为:

$divString = $main->nodeValue;

这样,$divString将包含//SOME THINGS IN MY DIV,根据您的示例,它是所需的输出。

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

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

这样做是利用继承的DOMNode::childNodes,其中包含一个DOMNodeList每个包含其自己的 DOMNode(供参考,见上文),我们遍历每个获取ownerDocumentwhich is aDOMDocument并调用该DOMDocument::saveXML()函数。我们将当前$c节点传递给函数的原因是为了防止输出整个有效文档,并且因为这ownerDocument是我们正在循环的内容 - 我们需要一次获取一个子节点,并且不留下任何子节点。(抱歉,来晚了,忍不住了。)

现在,在任何一种选择之后,您都可以随心所欲$divString。我希望这有助于向您解释该过程,并希望您能够更好地理解正在发生的事情,而不是仅仅因为代码有效而死记硬背。^^

于 2013-04-15T09:38:45.517 回答
0

你可以使用xpath

 $xpath = new DOMXPath($xml);

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

或者简单地说,您可以编辑您的代码。看这里

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

echo  $main->nodeValue
于 2013-04-15T08:37:47.253 回答
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
于 2013-04-15T08:49:02.740 回答