2011-01-20 11 views

Respuesta

14

Usted está buscando

- DOMDocumentFragment::appendXML — Append raw XML data

Ejemplo de manual:

$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

gracias, funcionó como un encanto !!!! – fabio

+1

Nota: Su entrada HTML también debe ser XML válido; de lo contrario, obtendrá errores. La forma en que lo he hecho es crear otro documento, cargar el HTML en ese (como HTML, no en XML) y luego importar en profundidad los nodos recién creados de nuevo en mi documento original. –

+0

En caso de que obtenga 'error en la conversión de salida debido a un error de conv'' en' DOMDocument :: saveHTML() 'como resultado de agregar código externo, debe forzar la conversión a un estándar de codificación específico, p. vía 'utf8_encode()'. – kenorb

5

Si usted no tiene una referencia a la document root en su alcance, siempre se puede acceder a él a través de la ownerDocument propiedad de un nodo arbitrario:

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

Sí, se puede hacer esto con DOMDocument::createDocumentFragment:

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

En este caso, sería más fácil hacerlo con una llamada normal createElement:

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

En cada caso, $element es el DOM elemento al que desea agregar su código.

+0

"En este caso, sería más simple hacerlo con una llamada a createElement normal:", este no es mi caso, ya que en mi aplicación puedo tener una entrada arbitraria para que el fragmento esté bien para esto. – fabio

+2

@fabio Correcto, entonces. Sin embargo, asegúrate de desinfectar tu entrada ... – lonesomeday

Cuestiones relacionadas