Foros del Web » Programando para Internet » PHP »

Guardar objeto DOM en base de datos

Estas en el tema de Guardar objeto DOM en base de datos en el foro de PHP en Foros del Web. Buenas, Espero que alguien sepa la respuesta ya sea afirmativa o negativa. ¿Se puede guardar un objeto DOM cargado de un xml en una base ...
  #1 (permalink)  
Antiguo 30/05/2011, 04:37
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Guardar objeto DOM en base de datos

Buenas,

Espero que alguien sepa la respuesta ya sea afirmativa o negativa.

¿Se puede guardar un objeto DOM cargado de un xml en una base de datos, de tal manera que cualquier script pudiera acceder a él?

Resulta que en cada ejecución tardo una media de 20 segundos en hacer el
Código:
$dom->load($path_file)
para cargar SIEMPRE el mismo xml, y me vendría de perlas ahorrarme todo ese tiempo en cada ejecución.

Muchas gracias a tod@s!
  #2 (permalink)  
Antiguo 30/05/2011, 08:18
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Guardar objeto DOM en base de datos

Convierte ese XML a array y almacena ese array en particular, usando serialize.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 30/05/2011, 09:04
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Guardar objeto DOM en base de datos

Buenas,

Estoy haciendo pruebas con serialize y la verdad es que no me está funcionando, o al menos no sé como usarlo correctamente.

Comento lo que quiero hacer:

En la primera ejecución creo un objeto DOM, cargo en él un fichero XML y mediante serialize, vuelco ese objeto en un fichero de texto (Hace de "base de datos").
En las siguientes ejecuciones leo el contenido de ese fichero de texto, y con unserialize recojo de nuevo el objeto DOM.

No sé muy bien si esto es posible, pero por lo que estoy viendo por ahí debería poder hacerse y a mí al menos no me funciona.

Posteo el código referente a esa parte:

Código PHP:
/*Si esta vacio es la primera ejecucion*/
if (filesize($path_myDOM) == 0)
{
    
$dom = new DOMDocument();
        
$dom->preserveWhiteSpace false;
        
$dom->load($path_xml);
    
    
$dom_serialized serialize($dom);
    
        
/*Escribo en el fichero de texto*/
    
file_put_contents($path_myDOM$dom_serialized);
}
/*Si no está vacío, abre el fichero y lo carga en un DOM*/
else
{    
    
$dom_string file_get_contents($path_myDOM);
    
    
/*Carga el contenido del fichero a un objeto DOM*/
    
$dom unserialize($dom_string);

Qué puedo hacer para guardar en ese fichero el objeto DOM para poder recuperarlo más adelante?

Gracias!
  #4 (permalink)  
Antiguo 30/05/2011, 09:18
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Guardar objeto DOM en base de datos

No debes guardar el objeto DOM en la base de datos, sino los datos persé. Trata de convertirlo a array y ese array lo guardas en la base de datos con serialize.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 31/05/2011, 00:25
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Guardar objeto DOM en base de datos

Hola de nuevo,

La verdad es que no entiendo a qué te refieres con convertir a array. Te refieres a guardar el objeto DOM dentro de un array?

Perdona mi desconocimiento pero no tengo la menor idea de como convertir un objeto a array...

Gracias!
  #6 (permalink)  
Antiguo 31/05/2011, 01:51
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Guardar objeto DOM en base de datos

Buenas,

He probado con la función settype de la siguiente manera :

Código PHP:
if ($primeravez)
{
    
settype($dom'array');
    
    
$dom_serialized serialize($dom);
    
    
file_put_contents($path_myDOM$dom_serialized);
}
else {
    
$dom_serialized file_get_contents($path_myDOM);
    
    
$dom unserialize($dom_serialized);
    
    
settype($dom'object');

Pero no funciona. No sé si te referías a esto, pero al menos en mi caso no tira
  #7 (permalink)  
Antiguo 31/05/2011, 05:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Guardar objeto DOM en base de datos

Algo así
Código PHP:
Ver original
  1. <?php
  2. $str = <<<XML
  3. <foo>
  4.     <bar something="value">bar</bar>
  5.     <baz>baz</baz>
  6.     <candy>candy</candy>
  7.     <fruits>fruits</fruits>
  8.     <vegetable>vegetable</vegetable>
  9. </foo>
  10. XML;
  11.  
  12. function getArray($node)
  13. {
  14.     $array = false;
  15.     if ($node->hasAttributes()){
  16.         foreach ($node->attributes as $attr){
  17.             $array['@' . $attr->nodeName] = $attr->nodeValue;
  18.         }
  19.     }
  20.     if ($node->hasChildNodes()){
  21.         if ($node->childNodes->length == 1){
  22.             $array[$node->firstChild->nodeName] = $node->firstChild->nodeValue;
  23.         }
  24.         else{
  25.             foreach ($node->childNodes as $childNode){
  26.                 if ($childNode->nodeType != XML_TEXT_NODE){
  27.                     $array[$childNode->nodeName][] = getArray($childNode);
  28.                 }
  29.             }
  30.         }
  31.     }
  32.     return $array;
  33. }
  34.  
  35. $xml = new DOMDocument();
  36. $xml->formatOutput = false;
  37. $xml->preserveWhiteSpace = false;
  38. $xml->loadXML($str);
  39. print_r(getArray($xml->firstChild));
La función getArray la tome de aquí http://www.php.net/manual/en/class.d...ent.php#101014
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 31/05/2011, 07:03
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Guardar objeto DOM en base de datos

Gracias abimaelrc,

Voy a probar a ver qué tal me va y te comento la jugada!

  #9 (permalink)  
Antiguo 31/05/2011, 07:34
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Guardar objeto DOM en base de datos

Hola de nuevo,

He probado la función que me has proporcionado cambiando ->firstChild por ->documentElement y me ha funcionado perfectamente.

Es decir, que me convierte el objeto DOM a array perfectamente, por lo que funcionan bien tanto el serialize como unserialize. Pero aún así me surge otro problema:

¿Cómo vuelvo a convertir ese array al objeto DOM anterior?

Joe, ya lo siento por ser tan preguntón pero es que realmente me estás salvando el cuello!
  #10 (permalink)  
Antiguo 31/05/2011, 07:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Guardar objeto DOM en base de datos

Sigue este ejemplo http://codeaid.net/php/add-array-cap...document-class Aunque la idea es que continues trabajando con el array, pero lo puedes convertir si quieres.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 31/05/2011, 08:35
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Guardar objeto DOM en base de datos

Buenas,

He intentado utilizar el ejemplo que has puesto pero no sirve. Directamente el autor avisa que ese código no sirve si los tags tienen atributos y que sólo lo recomienda con xml sencillos, lo cual no es mi caso...

Pero es curioso porque su función de convertir un DOM a un array sí que me funciona, pero a la inversa me devuelve varios errores.

Así que sigo teniendo un objeto DOM convertido a Array pero sin posibilidad de volver a ser objeto DOM.

Dios... me da la sensación de estar sólo a un paso!

Si encuentras alguna función que tenga la pinta de ser completita me harías un gran favor pasándomela!

Un saludo y muchísimas gracias eh?
  #12 (permalink)  
Antiguo 31/05/2011, 08:41
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Guardar objeto DOM en base de datos

No hay problemas. Pero sería bueno que sigas verificando o buscando sobre funciones, ya tienes la idea de lo que puedes hacer
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: datosdb, dom, objeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:51.