2011-06-20 11 views
6

के साथ एक div की सामग्री प्राप्त करना मैंने इस विषय पर अन्य स्टैक ओवरफ्लो प्रश्नों को देखा है और प्रदान किए गए समाधानों में से कोई भी मेरे लिए काम नहीं कर रहा है।PHP के डीओएम

मेरे पास एक HTML पृष्ठ है (file_get_contents() के साथ स्क्रैप किया गया है) और उस HTML में "मुख्य" की आईडी वाला एक div है - मुझे उस div की सामग्री को PHP के DOMDocument, या कुछ समान के साथ प्राप्त करने की आवश्यकता है। इस स्थिति के लिए मैं SimpleHTMLDom पार्सर का उपयोग नहीं कर सकता, जो चीजों को थोड़ा जटिल बनाता है।

+0

जब आप कहते हैं कि * मुझे लगता है कि div * की सामग्री को आप एक HTML मतलब है प्राप्त करने की आवश्यकता? – alex

+0

[DOMElement getElementById (स्ट्रिंग $ elementId)] (http://php.net/manual/en/class.domdocument.php) – Ibu

उत्तर

5

DOMDocument + XPath भिन्नता:

$xml = new DOMDocument(); 
$xml->loadHtml($temp); 
$xpath = new DOMXPath($xml); 

$html = ''; 
foreach ($xpath->query('//div[@id="main"]/*') as $node) 
{ 
    $html .= $xml->saveXML($node); 
} 

आप innerHTML() (PHP DOMDocument Reference Question) लिए देख रहे हैं - के बजाय innerXML() इस उत्तर के रूप में - xpath संबंधित संस्करण in this answer दिया जाता है।

यहाँ परिवर्तन के साथ गोद लेने को रेखांकित किया:

$html = ''; 
foreach ($xpath->query('//div[@id="main"]/node()') as $node) 
              ###### 
{ 
    $html .= $xml->saveHTML($node); 
         #### 
} 
+0

आश्चर्यजनक रूप से काम करता है, बहुत धन्यवाद। –

3

DOMDocument का उपयोग करना ...

$dom = new DOMDocument; 

$dom->loadHTML($html); 

$main = $dom->getElementById('main'); 

धारावाहिक एचटीएमएल प्राप्त करने के लिए ...

html = ''; 
foreach($main->childNodes as $node) { 
    $html .= $dom->saveXML($node, LIBXML_NOEMPTYTAG); 
} 

उपयोग saveHTML() अपने PHP संस्करण इसका समर्थन करता है।

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