2012-10-16 15 views
16

Ho questo codice html:Come ottenere il codice html del nodo DOMElement?

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

ho già posso ottenere l'elemento "foo" (ma solo il suo contenuto) con questa funzione:

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

ma mi piacerebbe tornare HTML tag (compresi i suoi attributi) di DOMElement. Come posso farlo?

+0

Se si sta cercando di ottenere 'html_from_node'' class = "foo" 'lo stai facendo non corretto. C'è un modo molto semplice e breve per farlo. –

+0

È utile? http://stackoverflow.com/questions/6366351/getting-dom-elements-by-class-name – EricG

+0

@webbandit So che c'è un modo migliore. Per favore mi mostri! – Xaver

risposta

37

Utilizzare l'argomento facoltativo su DOMDocument::saveHTML: questo comando "emette solo questo elemento".

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

Si noti che l'argomento è disponibile solo da PHP 5.3.6. Prima di ciò, è necessario utilizzare DOMDocument::saveXML. I risultati potrebbero essere leggermente diversi. Inoltre, se si dispone già di un riferimento al documento, è possibile solo fare questo:

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

Questo è in realtà ciò di cui ho bisogno, ma è per un plugin per WordPress che dovrebbe funzionare con la versione 3.4 e questa versione richiede php 5.2.4. – Xaver

+0

@revaxarts Quindi utilizzare 'saveXML'. L'uscita sarà leggermente diversa ... – lonesomeday

+0

mi hai indicato per un esempio completo? Non ho un riferimento del documento nella funzione solo il nodo e 'DOMDocument :: saveXML ($ node)' non funziona come '$ nodo-> saveXML ($ nodo)' – Xaver

Problemi correlati