2011-06-04 15 views
7

मेरे पास कक्षा में कई फ़ंक्शन हैं जो saveHTML() को वापस लौटाते हैं। कक्षा saveHTML() में एक से अधिक फ़ंक्शन को प्रतिबिंबित करने के बाद, यह कुछ HTML को दोहराता है। मैंने शुरुआत में इसे सेव HTML ($ नोड) करके हल किया लेकिन यह अब एक विकल्प प्रतीत नहीं होता है।

मुझे नहीं पता था कि सेव HTML ($ domnode) केवल PHP 5.3.6 में उपलब्ध था और मेरे पास फाइलों को अपलोड करने वाले सर्वर पर मेरा कोई नियंत्रण नहीं है, इसलिए अब मुझे इसे PHP 5.2 के साथ संगत बनाना है।

सादगी की खातिर के लिए यह और केवल मेरी समस्या को दिखाने के लिए यह समान यह करने के लिए लग रहा है:

<?php 

class HTML 
{ 
    private $dom; 

    function __construct($dom) 
    { 
     $this->dom = $dom; 
    } 

    public function create_paragraph() 
    { 
     $p = $this->dom->createElement('p','Text 1.'); 

      $this->dom->appendChild($p); 

     return $this->dom->saveHTML(); 
    } 

    public function create_paragraph2() 
    { 
     $p = $this->dom->createElement('p','Text 2.'); 

      $this->dom->appendChild($p); 

     return $this->dom->saveHTML(); 
    } 
} 

$dom = new DOMDocument; 
$html = new HTML($dom); 

?> 
<html> 
<body> 
<?php 

echo $html->create_paragraph(); 

echo $html->create_paragraph2(); 

?> 
</body> 
</html> 

आउटपुट:

<html> 
<body> 
<p>Text 1.</p> 
<p>Text 1.</p><p>Text 2.</p> 
</body> 

मैं एक विचार क्यों हो रहा है, लेकिन मुझे पता नहीं है इसे बिना एचटीएमएल ($ domnode) के दोहराने के लिए कैसे दोहराना है। मैं PHP 5.2 के साथ इसे ठीक से कैसे काम कर सकता हूं?

यहाँ मैं क्या करने में सक्षम होना चाहता हूँ का एक उदाहरण है:

http://codepad.viper-7.com/o61DdJ

+1

अपने उदाहरण के आधार पर है, जे के लिए 'DOMDocument' गलत उपकरण हो सकता है ओब। यदि आप मान्य आउटपुट चाहते हैं, तो आप XMLWriter का उपयोग कर सकते हैं। XMLWriter 5.2 में उपलब्ध है। Http://www.php.net/manual/en/book.xmlwriter.php – jmz

उत्तर

10

मैं क्या क्या, बस XML के रूप में नोड को बचाने है। वहाँ वाक्य रचना में कुछ अंतर हैं, लेकिन यह काफी अच्छा सबसे उपयोगों के लिए है:

return $dom->saveXml($node); 
+0

देखें जो मुझे चाहिए था। धन्यवाद :) – Tek

+0

ध्यान दें कि कुछ मामलों में आपको LIBXML_NOEMPTYTAG ध्वज जोड़ने की आवश्यकता हो सकती है: '$ dom-> saveXml ($ node, LIBXML_NOEMPTYTAG)' – SingLow

0

आप return $this->dom->saveHTML(); जहाँ तक मैं जानता हूँ कि आप इसे वर्ग के अंदर वापस जाने के लिए नहीं है अपनी कक्षा में दो बार है (कहीं भी यह एक निजी समारोह है, जब तक।

तो आप ले return $this->dom->saveHTML(); से बाहर createparagraph() कहीं भी होगी echo लौटने के बिना। यह एक डोम बात जहाँ तक मुझे पता है, लेकिन आप की तरह इस के लिए नया हूँ।

संबंधित मुद्दे