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

Clé*_*aud 1 php domdocument

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

我只想在没有div标签的情况下检索这个div的内容.

例如 :

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

在这里,我有结果:

<div id="inter">
//SOME THINGS IN MY DIV
</div>
Run Code Online (Sandbox Code Playgroud)

我只想拥有:

//SOME THINGS IN MY DIV
Run Code Online (Sandbox Code Playgroud)

想法?谢谢 !

Jon*_*Jon 5

我将简单地去做.你已经有了:

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

现在,DOMDocument::getElementById()返回一个 DOMElement扩展的DOMNode具有的public stringnodeValue.既然你没有指定你是否期望除了文本之外的任何东西div,我将假设你想要任何可能以纯文本形式存储在那里的东西.为此,我们将删除$dom->saveHTML();,而是将其替换为:

$divString = $main->nodeValue;
Run Code Online (Sandbox Code Playgroud)

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

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

$divString = "";
foreach($main->childNodes as $c) 
    $divString .= $c->ownerDocument->saveXML($c);
Run Code Online (Sandbox Code Playgroud)

这样做的好处是利用了DOMNode::childNodes包含DOMNodeList每个包含自己的DOMNode 的继承(供参考,参见上文),然后我们遍历每一个获取的ownerDocument是a DOMDocument,我们称之为DOMDocument::saveXML()函数.我们将当前$c节点传递给函数的原因是为了防止输出整个有效文档,因为这ownerDocument是我们正在循环的 - 我们需要一次得到一个孩子,没有留下孩子.(对不起,已经晚了,无法抗拒.)

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