Foros del Web » Programando para Internet » PHP »

Error Xml

Estas en el tema de Error Xml en el foro de PHP en Foros del Web. Hola Comunidad, me eh encontrado con un problema que espero solucionar con su valiosa ayuda. Tengo un archivo xml, que manipulo desde código php para ...
  #1 (permalink)  
Antiguo 06/05/2011, 08:22
 
Fecha de Ingreso: marzo-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Error Xml

Hola Comunidad, me eh encontrado con un problema que espero solucionar con su valiosa ayuda.
Tengo un archivo xml, que manipulo desde código php para leer y agregar un nuevo nodo a través de la clase DomDocument, funciona perfectamente.
El problema se da cuando el servidor recibe más de una petición por segundo para agregar un nuevo nodo, los tab (<>campo</>) del xml no se cierra correctamente y la estructura del xml se daña. La próxima vez que se intenta agregar un nuevo nodo, ya no es posible, la estructura está dañada....

¿Cómo remediar ésto?, ¿Es posible arreglar la estructura del xml desde código php?

Cualquier sugerencia es bienvenida
  #2 (permalink)  
Antiguo 06/05/2011, 08:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error Xml

Yo creo el problema es la forma de manipularlo, ya que si usaras correctamente DomDocument no deberías de tener esos problemas...
  #3 (permalink)  
Antiguo 06/05/2011, 08:49
 
Fecha de Ingreso: abril-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 2
Respuesta: Error Xml

eso a mi me paso por que en los datos de la base de datos venian con acentos o caracteres extraños trata de usar htmlentities en los que son string
  #4 (permalink)  
Antiguo 06/05/2011, 09:47
 
Fecha de Ingreso: marzo-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Error Xml

Ok, gracias por comentar. El uso de htmlentities, si está considerado y la manipulación del xml con DomDocument, es como sigue:

//Si no existe se crea
{
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->formatOutput = true;
$raiz = $xml->createElement('padre');
$xml->appendChild($raiz);
$xml->save('file.xml');
}

$xml = $this->load('file.xml'); //Si existe se lee
$nodo = $this->createElement('hijo');


$nieto = $this->createElement('dato');
$this->appendChild($nieto);
$datoText = $this->createTextNode(htmlentities($data));
$nieto->appendChild($datoText);
$nodo->appendChild($nieto);


$this->documentElement->appendChild($nodo);

$this->save('file.xml');

Se inserta correctamente los nodos, pero en algún momento cuando el archivo llega a un tamaño considerable y se pueden apreciar más de una petición por segundo, la inserción del nodo se queda a la mitad, el tab se queda mal cerrado y la estructura se daña.
  #5 (permalink)  
Antiguo 09/05/2011, 17:03
 
Fecha de Ingreso: marzo-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Error Xml

Eh encontrado el problema, que ya me lo percibía, pero aún no la solución.... jejeje
DomDocument permita la manipulación de un archivo xml de manera relativamente sencilla, pero necesita cargar toda la estructura del archivo en memoria antes de realizar la intersección del nodo. La memoria se sobrecarga, el nodo no se inserta correctamente, la estructura de daña y simplemente su uso queda obsoleto en la manipulación de xml de tamaño considerable.

Existe XmlReader y XmlWrite, pero este ultimo sobreescribe todo el archivo, o al menos yo no eh encontrado la forma de hacer lo mismo que hacia con DomDocument. Adicional XmlReader no soporta XPath.

¿Qué hacer?, que clase utilizar para agregar un nodo al final de un xml, sin sobrecargar la memoria del servidor??

Si alguien tiene alguna idea, bienvenida......... gracias!!!!!!!!!!
  #6 (permalink)  
Antiguo 09/05/2011, 18:37
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: Error Xml

SimpleXML te permite también añadir. ¿Lo haz tratado?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 18/05/2011, 11:23
 
Fecha de Ingreso: marzo-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Error Xml

Cita:
Iniciado por abimaelrc Ver Mensaje
SimpleXML te permite también añadir. ¿Lo haz tratado?
Gracias x la sugerencia, lo eh estado tratando pero es muy limitado al momento de modificar un archivo xml. Es bueno en cuanto a lectura de datos, pero no ha solucionado mi problema o no eh encontrado la forma de añadir nuevos nodos a un archivo xml exixtente, de las misma forma que lo hacia con DOM. Se puede transormar de SimpleXML a Dom para tratarlo pero seria volver al mismo problema de memoria.....

Si sabes como añadir nuevos nodos a un xml usando SimpleXML o cualquier otra clase que no ocupe tanta memoria como DOM, te lo agradeceria inmensamente.

Cualquier sugerencia es bienvenida!!!
  #8 (permalink)  
Antiguo 18/05/2011, 11:37
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: Error Xml

¿Verificaste el manual?, porque hay un método para añadir, addChild.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: xml
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 02:22.