[英]PHP DOMDocument, retrieve just content of a div, without div tag
我正在使用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
想法? 謝謝 !
我將簡單地做到這一點。 你已經有了:
$dom = new DOMDocument;
$dom->loadHTML($webtext['content']);
$main = $dom->getElementById('inter');
$dom->saveHTML();
現在, DOMDocument::getElementById()
返回一個 DOMElement
,它擴展了具有public string
nodeValue
DOMNode
。 由於您未指定除該div
文本外是否期望其他任何內容,因此我假設您希望將任何內容存儲為純文本形式。 為此,我們將刪除$dom->saveHTML();
,而是將其替換為:
$divString = $main->nodeValue;
這樣, $divString
將在//SOME THINGS IN MY DIV
包含//SOME THINGS IN MY DIV
內容,根據您的示例,這是所需的輸出。
但是,如果您希望在其中包含HTML,而不僅是String表示,請改為以下內容:
$divString = "";
foreach($main->childNodes as $c)
$divString .= $c->ownerDocument->saveXML($c);
這樣做是利用繼承的DOMNode::childNodes
優勢,其中包含一個DOMNodeList
每個DOMNodeList
都包含自己的DOMNode(供參考,請參見上文),我們遍歷每一個都獲得ownerDocument
,它是DOMDocument
,我們將其稱為DOMDocument::saveXML()
函數。 我們將當前$c
節點傳遞給函數的原因是為了防止輸出整個有效文檔,並且因為ownerDocument
是我們正在循環的內容-我們需要一次生一個孩子,而沒有一個孩子。 (對不起,很晚了,無法抗拒。)
現在,在任一選項之后,都可以使用$divString
。 我希望這對您有所幫助,並希望您對正在發生的事情有一個更好的了解,而不是僅僅因為它起作用而死記硬背復制代碼。 ^^
您可以使用我的自定義功能從內容中刪除多余的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.