दिलचस्प पोस्ट
कैसे मैं जावा में सीपीयू और मेमोरी उपयोग की जांच? हाइबरनेट वैलिएटर (JSR 303) के साथ क्रॉस फील्ड मान्यता कैसे पृष्ठभूमि की ऊंचाई को समायोजित करने के लिए div ऊंचाई पाने के लिए? अचूक संदर्भएर्रर: $ परिभाषित नहीं है? क्या जावास्क्रिप्ट एक पास-बाय-रेफरेंस या पास-बाय-वैल्यू भाषा है? जावास्क्रिप्ट / jQuery: टेस्ट अगर विंडो फोकस है अप्रचलित चेतावनी: पल निर्माण जेएस दिनांक पर वापस गिर जाता है स्ट्रिंग को चर नाम या चर प्रकार में परिवर्तित करें JavaScript \ HTML में सॉकेट कैसे उपयोग करें? अमान्य XML वर्णों को सी # में से बचें Js का उपयोग कर सॉफ्टवेयर संस्करण संख्या की तुलना कैसे करें? (केवल संख्या) JSON और जावास्क्रिप्ट ऑब्जेक्ट के बीच अंतर क्या हैं? पायथन में कैसे काम करता है? डिफ़ॉल्ट निर्माता बनाम इनलाइन फ़ील्ड इनिशियलाइज़ेशन क्यों regex कन्स्ट्रक्टर को डबल पलायन करने की आवश्यकता है?

पीएचपी डोमोनोड में एचटीएमएल कैसे डालें?

क्या इनको एन्कोड किए जा रहे सामग्री के बिना मौजूदा डोमोनोड में एक HTML टेम्पलेट सम्मिलित कर सकते हैं?

मैंने ऐसा करने की कोशिश की है:

$dom->createElement('div', '<h1>Hello world</h1>'); $dom->createTextNode('<h1>Hello world</h1>'); 

आउटपुट बहुत ही समान है, केवल अंतर के साथ कि पहला कोड एक div में लपेटता है। मैंने स्ट्रिंग से एचटीएमएल लोड करने की कोशिश की है लेकिन मुझे पता नहीं है कि मैं इसकी सामग्री सामग्री को दूसरे DOMDocument में कैसे जोड़ सकता हूं।

जावास्क्रिप्ट में, यह प्रक्रिया काफी सरल और स्पष्ट लगती है।

वेब के समाधान से एकत्रित समाधान "पीएचपी डोमोनोड में एचटीएमएल कैसे डालें?"

यह एचटीएमएल कोड पार्स करने के लिए एक अन्य DOMDocument के साथ काम करता है। लेकिन आपको मुख्य दस्तावेज में नोड्स को आयात करने की जरूरत है इससे पहले कि आप उन्हें इसमें इस्तेमाल कर सकें:

 $newDiv = $dom->createElement('div'); $tmpDoc = new DOMDocument(); $tmpDoc->loadHTML($str); foreach ($tmpDoc->getElementsByTagName('body')->item(0)->childNodes as $node) { $node = $dom->importNode($node, true); $newDiv->appendChild($node); } 

और एक आसान काम के रूप में:

 function appendHTML(DOMNode $parent, $source) { $tmpDoc = new DOMDocument(); $tmpDoc->loadHTML($source); foreach ($tmpDoc->getElementsByTagName('body')->item(0)->childNodes as $node) { $node = $parent->ownerDocument->importNode($node, true); $parent->appendChild($node); } } 

तो आप बस ऐसा कर सकते हैं:

 $elem = $dom->createElement('div'); appendHTML($elem, '<h1>Hello world</h1>'); 

आप उपयोग कर सकते हैं

  • DOMDocumentFragment::appendXML – कच्चे XML डेटा जोड़ें

उदाहरण:

 // just some setup $dom = new DOMDocument; $dom->loadXml('<html><body/></html>'); $body = $dom->documentElement->firstChild; // this is the part you are looking for $template = $dom->createDocumentFragment(); $template->appendXML('<h1>This is <em>my</em> template</h1>'); $body->appendChild($template); // output echo $dom->saveXml(); 

आउटपुट:

 <?xml version="1.0"?> <html><body><h1>This is <em>my</em> template</h1></body></html> 

यदि आप किसी अन्य DOMDocument से आयात करना चाहते हैं, तो तीन लाइनों को प्रतिस्थापित करें

 $tpl = new DOMDocument; $tpl->loadXml('<h1>This is <em>my</em> template</h1>'); $body->appendChild($dom->importNode($tpl->documentElement, TRUE)); 

importNode के द्वितीय तर्क के रूप में TRUE का प्रयोग नोड पेड़ के पुनरावर्ती आयात करेगा।


अगर आपको (विकृत) HTML आयात करने की आवश्यकता है, loadHTML करने के लिए loadXml को बदलें HTML यह एचटीएमएल पार्सर को ट्रिगर करेगा, जो कि एलकब्क्सएमएल (जो एएनएसटी / डीओएम आंतरिक रूप से उपयोग करता है):

 libxml_use_internal_errors(true); $tpl = new DOMDocument; $tpl->loadHtml('<h1>This is <em>malformed</em> template</h2>'); $body->appendChild($dom->importNode($tpl->documentElement, TRUE)); libxml_use_internal_errors(false); 

ध्यान दें कि libxml मार्कअप को सही करने का प्रयास करेगा, जैसे यह गलत समापन </h2> से </h1> को बदल देगा।

जैसा कि मैं एक्सएमएल के साथ संघर्ष करना नहीं चाहता, क्योंकि यह त्रुटियों को तेज करता है और मैं त्रुटि आउटपुट को रोकने के लिए एक @ उपसर्ग के प्रशंसक नहीं हूं। लोड एचटीएमएल मेरी राय में बेहतर काम करता है और यह काफी सरल है:

 $doc = new DOMDocument(); $div = $doc->createElement('div'); // use a helper to load the HTML into a string $helper = new DOMDocument(); $helper->loadHTML('<a href="#">This is my HTML Link.</a>'); // now the magic! // import the document node of the $helper object deeply (true) // into the $div and append as child. $div->appendChild($doc->importNode($helper->documentElement, true)); // add the div to the $doc $doc->appendChild($div); // final output echo $doc->saveHTML(); 

यहां DOMDocumentFragment का उपयोग करके सरल उदाहरण दिया गया है:

 $doc = new DOMDocument(); $doc->loadXML("<root/>"); $f = $doc->createDocumentFragment(); $f->appendXML("<foo>text</foo><bar>text2</bar>"); $doc->documentElement->appendChild($f); echo $doc->saveXML(); 

DOMNode को बदलने के लिए सहायक फ़ंक्शन है:

 /** * Helper function for replacing $node (DOMNode) * with an XML code (string) * * @var DOMNode $node * @var string $xml */ public function replaceNodeXML(&$node, $xml) { $f = $this->dom->createDocumentFragment(); $f->appendXML($xml); $node->parentNode->replaceChild($f,$node); } 

स्रोत: कुछ पुराने "PHP5 डोमेन आधारित टेम्पलेट" आलेख।

और यहां एक अन्य सुझाव है जो Pian0_M4n द्वारा पोस्ट किया गया है ताकि मूल्य विशेषता का उपयोग वैकल्पिक हल के रूप में किया जा सके:

 $dom = new DomDocument; // main object $object = $dom->createElement('div'); // html attribute $attr = $dom->createAttribute('value'); // ugly html string $attr->value = "<div>&nbsp; this is a really html string &copy;</div><i></i> with all the &copy; that XML hates!"; $object->appendChild($attr); // jquery fix (or javascript as well) $('div').html($(this).attr('value')); // and it works! $('div').removeAttr('value'); // to clean-up 

कोई आदर्श नहीं, लेकिन कम से कम यह काम करता है

गुंबो का कोड पूरी तरह से काम करता है! बस थोड़ा संवर्द्धन जो कि सही पैरामीटर को जोड़ता है ताकि यह नेस्टेड एचटीएमएल स्निपेट्स के साथ काम करे।

 $node = $parent->ownerDocument->importNode($node); $node = $parent->ownerDocument->importNode($node, **TRUE**);