2010-02-10 18 views
6

Obtengo una cadena XML de una fuente determinada. Creo un objeto DOMDocument y cargo la cadena XML en él (con DOMDocument :: loadXML()). Luego navego por el documento XML utilizando varios métodos (por ejemplo, DOMXPath), hasta que encuentre el nodo (un DOMNode, por supuesto) que quiero.Creando un DOMDocument desde un DOMNode en PHP

Este nodo tiene un grupo de descendientes, y quiero tomar ese nodo completo (y sus descendientes) y crear un nuevo objeto DOMDocument a partir de él. No estoy seguro de cómo hacer esto; Traté de crear un nuevo DOMDocument y usar DOMDocument :: importNode(), pero parece que esto solo funciona si DOMDocument ya tiene un nodo de documento principal, en cuyo caso agrega el nodo importado como hijo del nodo del documento principal, que no es lo que quiero, quiero que el nodo importado se convierta en el nodo principal de DOMDocument.

Quizás haya una manera más fácil de hacerlo (es decir, una manera más fácil de extraer la parte del XML original que quiero convertir en su propio documento), pero no lo sé. Soy relativamente nuevo en DOMDocument, aunque he usado SimpleXMLElement lo suficiente como para molestarme.

Respuesta

13

También puede crear un nuevo DOMDocument y llame appendChild() en él para añadir un nodo raíz:

 
$new = new DomDocument; 
$new->appendChild($new->importNode($node, true)); 

que trabajó para mí.

0

¿No puede simplemente crear un nuevo DOMDocument y cargar el XML del nodo?

$new = new DOMDocument; 
$new->loadXML($node->ownerDocument->saveXML($node)); 

No puedo probarlo ahora pero debería funcionar.

+0

Esto debería funcionar pero implicará serializar y volver a analizar el código XML que 'importNode()' evita. – thomasrutter