Hola amigos de cristalab, tengo una pequeñsa duda que quisiera me dieran una mano, estoy manipulando archivos xml a traves de las funciones DOM XML en PHP, la idea es poder extaer un nodo ( que tiene nodo hijos o childNodes) y adjuntarlo al nodo de un xml que he construido.

este es el xml

Código :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE WebSacoDoc SYSTEM "base_xml_saco.dtd">
<WebSacoDoc>
   <contexto id="01">
      <titulo>quienes somos</titulo>
      <texto>Aqui el txto de quienes somos</texto>
      <foto>aqui la direccion de la foto o imagen</foto>
   </contexto>
   <contexto id="02">
      <titulo>mision / vision</titulo>
      <texto>Aqui el texto de mision / vision</texto>
      <foto>aqui la direccion de la foto o imagen</foto>
   </contexto>
   <contexto id="03">
      <titulo>trayectoria</titulo>
      <texto>Aqui el txto de trayectoria</texto>
      <foto>aqui la direccion de la foto o imagen</foto>
   </contexto>
   <contexto id="04">
      <titulo>Servicios</titulo>
      <texto>Aqui el txto de servicios</texto>
      <foto>aqui la direccion de la foto o imagen</foto>
   </contexto>
</WebSacoDoc>


y esta es la php que extrae contruye el nuevo documento y trata de insertar el nodo capturado

Código :

<?php
   /*header('Content-Type:Text/xml');*/
    $car = new DOMDocument();
    $car->load('inicio.xml');
   $idrecogido = 02;
   foreach ($car->getElementsByTagName('contexto') as $nodo){
   //capturamos el nodo contexto deseado
      if ($idrecogido == $nodo->getAttribute(id)){
         $muestra = $nodo;
      }
   }
   $imp = new DOMImplementation;   //creo la implementacion respectiva
   $dtd = $imp->createDocumentType('WebSacoDoc', '', 'base_xml_saco.dtd');
   $dom = $imp->createDocument('', '', $dtd);   //creo el documento respectivamente
   $dom->encoding = 'UTF-8';
   $dom->standalone = false;

   $element = $dom->createElement('WebSacoDoc');   //creo el elemento WebSacoDoc
   $dom->appendChild($element);   //lo adjunto al xml
   $nivel = $dom->documentElement;   //entro al nivel de WebSacoDoc
   $captor = $nivel->getElementsByTagName('WebSacoDoc');
   $nivel->appendChild($muestra);   //intento adjuntar el nodo con sus child en el elemento WebSacoDoc
   echo $dom->saveXML;


y este es el error que bota

Código :


Fatal error: Uncaught exception 'DOMException' with message 'Wrong Document Error' in C:\AppServ\www\inicio\XMLemb\inicio2.php:26 Stack trace: #0 C:\AppServ\www\inicio\XMLemb\inicio2.php(26): DOMNode->appendChild(Object(DOMElement)) #1 {main} thrown in C:\AppServ\www\inicio\XMLemb\inicio2.php on line 26


Al parecer no puede adjuntarlo correctamente porque lo recibe como un objeto y segun la documentcaion de php lo que debe recibir es un nodo. Yo crei que lo que tenia en $muestra era el nodo contexto 02 y este junto con sus child se juntarian al nuevo documento. Como podría hacer para realizar correctamente esta operación.

Gracias de antemano