我正在使用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)
想法?谢谢 !
我将简单地去做.你已经有了:
$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事情.我希望这有助于向您解释这个过程,并希望您能够更好地了解正在发生的事情,而不是仅因为它有效而对代码进行死记硬背.^^