2012-10-16 38 views
16

मैं इस एचटीएमएल कोड है:डोमेलेमेंट नोड के एचटीएमएल कोड कैसे प्राप्त करें?

<html> 
    <head> 
    ... 
    </head> 
<body> 
    <div> 
    <div class="foo" data-type="bar"> 
     SOMECONTENTWITHMORETAGS 
    </div> 
    </div> 
</body> 

मैं पहले से ही तत्व "foo" (लेकिन केवल अपनी सामग्री) इस समारोह के साथ प्राप्त कर सकते हैं:

private function get_html_from_node($node){ 
    $html = ''; 
    $children = $node->childNodes; 

    foreach ($children as $child) { 
    $tmp_doc = new DOMDocument(); 
    $tmp_doc->appendChild($tmp_doc->importNode($child,true)); 
    $html .= $tmp_doc->saveHTML(); 
    } 
    return $html; 
} 

लेकिन मैं सब वापस किए जाने वाले एचटीएमएल टैग (इसके गुणों सहित) DOMElement। मैं यह कैसे कर सकता हूँ?

+0

यदि आप 'html_from_node'' class = "foo" प्राप्त करने का प्रयास कर रहे हैं, तो आप इसे सही नहीं कर रहे हैं। ऐसा करने का बहुत आसान और छोटा तरीका है। –

+0

क्या यह सहायक है? http://stackoverflow.com/questions/6366351/getting-dom-elements-by-class-name – EricG

+0

@webbandit मुझे पता है कि एक बेहतर तरीका है। कृपया मुझे दिखाओ! – Xaver

उत्तर

37

DOMDocument::saveHTML पर वैकल्पिक तर्क का उपयोग करें: यह कहता है "केवल इस तत्व को आउटपुट करें"।

return $node->ownerDocument->saveHTML($node); 

ध्यान दें कि तर्क केवल PHP 5.3.6 से उपलब्ध है। इससे पहले, आपको इसके बजाय DOMDocument::saveXML का उपयोग करने की आवश्यकता है। परिणाम थोड़ा अलग हो सकते हैं। इसके अलावा, अगर आप पहले से ही दस्तावेज़ के लिए एक संदर्भ है, तो आप सिर्फ यह कर सकते हैं:

$doc->saveHTML($node); 
+0

यह वास्तव में मुझे चाहिए, लेकिन यह एक वर्डप्रेस प्लगइन के लिए है जो संस्करण 3.4 के साथ काम करना चाहिए और इस संस्करण के लिए PHP 5.2.4 की आवश्यकता है। – Xaver

+0

@revaxarts फिर 'saveXML' का उपयोग करें। आउटपुट थोड़ा अलग होगा ... – lonesomeday

+0

क्या आप मुझे एक पूर्ण उदाहरण के लिए इंगित करते हैं? मेरे पास फ़ंक्शन में दस्तावेज़ का संदर्भ नहीं है केवल नोड और 'DOMDocument :: saveXML ($ node)' 'node-> saveXML ($ node)' – Xaver