2012-10-16 20 views
16

Mam ten kod HTML:Jak uzyskać kod HTML węzła DOMElement?

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

I już można dostać element "foo" (ale tylko jego zawartość) z tej funkcji:

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; 
} 

Ale chciałbym wrócić wszystko html tagi (w tym jego atrybuty) DOMElement. Jak mogę to zrobić?

+0

Jeśli próbujesz uzyskać 'html_from_node'' class = "foo" 'robisz to nie jest poprawne. Jest to bardzo łatwe i krótkie. –

+0

Czy to pomocne? http://stackoverflow.com/questions/6366351/getting-dom-elements-by-class-name – EricG

+0

@webbandit Wiem, że jest lepszy sposób. Proszę pokaż mi! – Xaver

Odpowiedz

37

Użyj opcjonalnego argumentu do DOMDocument::saveHTML: mówi "wypisz tylko ten element".

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

Należy zauważyć, że argument jest dostępny tylko z PHP 5.3.6. Wcześniej należy zamiast tego użyć DOMDocument::saveXML. Wyniki mogą się nieznacznie różnić. Ponadto, jeśli masz już odniesienie do dokumentu, można po prostu to zrobić:

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

To jest właściwie to, czego potrzebuję, ale jest to dla wtyczki WordPress, która powinna działać z wersją 3.4, a ta wersja wymaga php 5.2.4. – Xaver

+0

@revaxarts Następnie użyj 'saveXML'. Wynik będzie trochę inny ... – lonesomeday

+0

u wskazuje mi pełny przykład? Nie mam odniesienia do dokumentu w funkcji tylko węzeł i 'DOMDocument :: saveXML (węzeł $)' nie działa tak samo jak '$ węzeł-> saveXML (węzeł $)' – Xaver

Powiązane problemy