2011-03-23 9 views
15

मैं एक स्ट्रिंग के अंदर वीडियो लिंक को बदलने के लिए कोशिश कर रहा हूँ यहाँ मेरे कोड है:DOMDocument के बाहरी HTML को कैसे वापस करें? -

$doc = new DOMDocument(); 
$doc->loadHTML($content); 
foreach ($doc->getElementsByTagName("a") as $link) 
{ 
    $url = $link->getAttribute("href"); 
    if(strpos($url, ".flv")) 
    { 
     echo $link->outerHTML(); 
    } 
} 

दुर्भाग्य से, outerHTML जब मैं <a href='http://www.myurl.com/video.flv'></a>

की तरह पूर्ण हाइपरलिंक के लिए एचटीएमएल कोड प्राप्त करने के कोशिश कर रहा हूँ काम नहीं करता है

कोई विचार यह कैसे प्राप्त करें?

उत्तर

18

PHP के रूप में 5.3.6 आप saveHtml, उदा करने के लिए एक नोड पारित कर सकते हैं

$domDocument->saveHtml($nodeToGetTheOuterHtmlFrom); 

PHP के पिछले संस्करणों ने उस संभावना को लागू नहीं किया था। आपको saveXml() का उपयोग करना होगा, लेकिन यह एक्सएमएल अनुपालन मार्कअप बनाएगा। <a> तत्व के मामले में, हालांकि यह कोई समस्या नहीं होनी चाहिए।

http://blog.gordon-oheim.biz/2011-03-17-The-DOM-Goodie-in-PHP-5.3.6/

+0

डोमोडोड में डीओएमडी दस्तावेज़ भी शामिल है ताकि आप इसे कर सकें कहां सिर्फ उस नोड को प्राप्त करें जिसे आप HTML प्राप्त करना चाहते हैं: $ domNode-> ownerDocument-> saveHTML ($ domNode); उस के लिए – rooby

6

आप में पीएचपी मैनुअल के DOM section के उपयोगकर्ताओं नोटों प्रस्ताव की एक जोड़ी मिल सकता है देखते हैं।

उदाहरण के लिए, यहाँ एक xwisdom द्वारा पोस्ट की गई है:

<?php 
// code taken from the Raxan PDI framework 
// returns the html content of an element 
protected function nodeContent($n, $outer=false) { 
    $d = new DOMDocument('1.0'); 
    $b = $d->importNode($n->cloneNode(true),true); 
    $d->appendChild($b); $h = $d->saveHTML(); 
    // remove outter tags 
    if (!$outer) $h = substr($h,strpos($h,'>')+1,-(strlen($n->nodeName)+4)); 
    return $h; 
} 
?> 
+0

धन्यवाद, लेकिन मैं वास्तव में पूर्ण बाहरी एचटीएमएल के लिए देख रहा हूँ - सहित पूर्ण कोड:/ – Fuxi

+0

@Fuxi कोड द्वारा पहचानने मैं कहना चाहता हूँ आप $ सही पर बाहरी तो सेट करना होगा। लेकिन वास्तव में उस फ़ंक्शन का उपयोग करने का कोई कारण नहीं है, क्योंकि आप मेरे उत्तर में समझाए गए बाहरी HTML प्राप्त करने के लिए 'saveXml' और' saveHTML' का उपयोग कर सकते हैं। अपनी टिप्पणी :-) * के लिए – Gordon

+0

@Gordon धन्यवाद (और मैं "saveHTML का उपयोग" विचार से सहमत - यदि पीएचपी> = 5.3.6 का उपयोग कर) * –

3

सर्वोत्तम संभव समाधान अपने खुद के समारोह जो वापस आ जाएगी परिभाषित करने के लिए है आप outerhtml:

function outerHTML($e) { 
    $doc = new DOMDocument(); 
    $doc->appendChild($doc->importNode($e, true)); 
    return $doc->saveHTML(); 
} 

से आप अपने कोड में उपयोग कर सकते हैं

echo outerHTML($link); 
+0

बेस्ट समाधान, कम से कम और अच्छी तरह से काम करता है! – Pepijn

+0

केवल PHP <5.3.6 के लिए, उसके बाद नोड को saveHTML() के लिए तर्क के रूप में प्रदान करें, जैसे गॉर्डन ने लिखा था। एक नोड को बचाने के लिए, एक पूर्ण दस्तावेज़ बनाने की आवश्यकता नहीं है। – ThW