2011-01-20 12 views

risposta

14

Siete alla ricerca di

- DOMDocumentFragment::appendXML — Append raw XML data

Esempio da manuale:

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

grazie, ha funzionato come un fascino !!!! – fabio

+1

Nota: l'input HTML deve anche essere XML valido altrimenti si otterranno errori. Il modo in cui ho fatto questo è quello di creare un altro documento, caricare l'HTML in quello (come HTML, non XML) e quindi importare in profondità i nodi appena creati nel mio documento originale. –

+0

Nel caso in cui si ottenga la 'conversione di output fallita a causa di un errore di convocazione' su 'DOMDocument :: saveHTML()' come risultato dell'aggiunta di codice esterno, è necessario forzare la conversione in standard di codifica specifici, ad es. tramite 'utf8_encode()'. – kenorb

5

Se non si dispone di un riferimento al document root nel campo di applicazione, è sempre possibile accedere tramite il ownerDocument proprietà di un nodo arbitrario:

$frag = $trElement->ownerDocument->createDocumentFragment(); 
$frag->appendXML("<a href='?select_user=4'>Username</a>"); 
$trElement->appendChild($frag); 
1

Sì, è possibile farlo con DOMDocument::createDocumentFragment:

$fragment = $dom->createDocumentFragment(); 
$fragment->appendXML('<a href="select_user=4">Username</a>'); 
$element->appendChild($fragment); 

In questo caso, sarebbe più semplice farlo con un normale createElement chiamata:

$el = $dom->createElement('a', 'Username'); 
$el->setAttribute('href', 'select_user=4'); 
$element->appendChild($el); 

In ogni caso, $element è il DOM elemento a cui si desidera aggiungere il codice.

+0

"In questo caso, sarebbe più semplice farlo con una normale chiamata createElement:", questo non è il mio caso dato che nella mia app posso avere un input arbitrario quindi il frammento è ok per questo. – fabio

+2

@fabio Proprio così, allora. Assicurati di disinfettare il tuo input anche se ... – lonesomeday

Problemi correlati