DOM (çocuk etiketler de dahil) bir div alma içeriği

3 Cevap php

i am using DOM to get content of div tag but inner html part is not shown. Function is:

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTMLFile("$url");
libxml_use_internal_errors(false);
$xpath = new DOMXPath($dom);
$divTag = $xpath->query('//div[@id="post"]');
foreach ($divTag as $val) {
echo $val->getAttribute('title') . ' - ' . $val->nodeValue . "<br />\n";
}

Sayfanın kaynak (sadece Div için) ise,

<div id="post">Some text <img src="..." /> <table>some codes</table></div>

sonra sadece döner çalışması

"Some text "

ama böyle de tüm HTML öğelerini almak istiyorum:

Some text <img src="..." /> <table>some codes</table>

Bunu yapmak için herhangi bir yolu var mı? Teşekkürler hemen.

3 Cevap

Eğer tarayıcı DOM innerHTML in DOMDocument sürümü arıyorsanız, en yakın saveXML.

echo $dom->saveXML(val).'<br />\n';

(Aslında metin olarak görünen istiyorsanız htmlspecialchars'dan unutmayın.)

Bu size outerHTML olsa verir. Eğer gerçekten innerHTML gerekiyorsa, elemanın alt düğümlerin her döngü var ve saveXML, sonra onları patlamaya onları geçmek istiyorum.

Ve sadece XML serileştirme var: hiçbir karşılık gelen HTML sürümü var. saveHTML var, fakat sadece ne yazık ki, bir kerede bütün belge kaydedebilirsiniz. Eğer eski-HTML olsun önemli ise, sizin gibi rahatsız edici boş etiketleri <script src="..."></script> kesmeyen sağlamak için LIBXML_NOEMPTYTAG seçeneği ileterek onunla kurtulmak mümkün olabilir tarayıcı.

Lütfen XPath sorgusu gelen '/ /' çıkarmayı deneyin ...

Bu daha sonra da HTML etiketleri hangi ... tüm alt düğümlerini almak için XPath çözümleyici söyler ...

Referans: http://www.w3schools.com/XPath/xpath%5Fsyntax.asp

EDIT:

Ayrıca XPath eksenler kontrol: http://www.w3schools.com/xpath/xpath%5Faxes.asp

Temelde ne bobince dedi, ama html görüntülemeden php bunu eğer içeriğini almak için çıktı tamponlama kullanabilirsiniz ekliyorum.

$divTag = $xpath->query('//div[@id="post"]');
ob_start();
foreach ($divTag as $val) {
   echo $dom->saveXML($val);
}
$content = ob_get_clean();