簡體   English   中英

PHP DOMDocument,僅檢索div的內容,不帶div標簽

[英]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 我希望這對您有所幫助,並希望您對正在發生的事情有一個更好的了解,而不是僅僅因為它起作用而死記硬背復制代碼。 ^^

你可以使用xpath

 $xpath = new DOMXPath($xml);

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

或簡單,您可以編輯代碼。 看這里

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

echo  $main->nodeValue

您可以使用我的自定義功能從內容中刪除多余的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

將標簽更改<a>為</a><div>使用 WordPress 上的 DOMDocument</div><div id="text_translate"><p> 我是 PHP 的初學者,我想設置幾個函數來替換 WordPress 上的特定代碼位(包括我無法直接編輯的插件元素)。</p><p> 下面是一個示例(第一行:初始結果,第二行:期望結果):</p><pre> &lt;a href="" class="vcard author"&gt;&lt;span class="fn" itemprop="name"&gt;Gael Beyries&lt;/span&gt;&lt;/a&gt; &lt;div class="vcard author"&gt;&lt;span class="fn" itemprop="name"&gt;Gael Beyries&lt;/span&gt;&lt;/div&gt;</pre><p> PS:我遇到了這個話題: <a href="https://stackoverflow.com/questions/20820848/parsing-wordpress-post-content/20822406" rel="nofollow noreferrer">Parsing WordPress post content</a>但是這個例子對於我想做的事情來說太復雜了。 你能給我一個解決這個問題的示例代碼,以便我可以嘗試修改它來修改其他 html 元素嗎?</p></div>

[英]Changing a tag <a> to <div> with DOMDocument on WordPress

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 DOMDocument使用PHP刪除div及其按標識符包含的內容 PHP DOMDocument用div ID替換內容 如何通過DOMDocument從div中的段落標簽獲取內容? 將標簽更改<a>為</a><div>使用 WordPress 上的 DOMDocument</div><div id="text_translate"><p> 我是 PHP 的初學者,我想設置幾個函數來替換 WordPress 上的特定代碼位(包括我無法直接編輯的插件元素)。</p><p> 下面是一個示例(第一行:初始結果,第二行:期望結果):</p><pre> &lt;a href="" class="vcard author"&gt;&lt;span class="fn" itemprop="name"&gt;Gael Beyries&lt;/span&gt;&lt;/a&gt; &lt;div class="vcard author"&gt;&lt;span class="fn" itemprop="name"&gt;Gael Beyries&lt;/span&gt;&lt;/div&gt;</pre><p> PS:我遇到了這個話題: <a href="https://stackoverflow.com/questions/20820848/parsing-wordpress-post-content/20822406" rel="nofollow noreferrer">Parsing WordPress post content</a>但是這個例子對於我想做的事情來說太復雜了。 你能給我一個解決這個問題的示例代碼,以便我可以嘗試修改它來修改其他 html 元素嗎?</p></div> PHP DOMDocument:如何刪除一個 div? 從不同頁面的DomDocument獲取div內容 PHP DOMDocument如何獲取該標簽的內容? PHP 使用 domdocument 提取 DIV 塊的內容 通過 DOMDocument PHP 獲取 DIV 元素內容 DOMDocument:查找div,獲取內容並在不使用div的情況下進行打印
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM