Foros del Web » Programando para Internet » Javascript »

Problema con xml document

Estas en el tema de Problema con xml document en el foro de Javascript en Foros del Web. Hola gente, estoy teniendo un problema al leer un XML con JavaScript. La cuestión es la siguiente, tengo un servlet java que genera un XML ...
  #1 (permalink)  
Antiguo 19/02/2011, 15:20
Avatar de ezefarina  
Fecha de Ingreso: junio-2009
Mensajes: 91
Antigüedad: 15 años, 5 meses
Puntos: 2
Pregunta Problema con xml document

Hola gente, estoy teniendo un problema al leer un XML con JavaScript. La cuestión es la siguiente, tengo un servlet java que genera un XML como este:
Código:
<list>
	<operation>
		<windowID>messages_center_w_temp</windowID>
		<operationID>closeWindowOP</operationID>
	</operation>
	<operation>
		<id>messages_center_w</id>
		<title>Centro de Mensajes</title>
		<content><div style="position:relative;overflow:auto;scrollbars:true;height:300px;">
			<table id="messages_center_table" cellspacing="1" class="tablesorter" style="width:758px;"> 
				<thead> 
				<tr> 
					<th>Asunto</th> 
					<th>Fecha</th> 
					<th>Mensaje</th> 
					<th></th> 
				</tr> 
				</thead>
			</table>
		</content>
		<maximizable>false</maximizable>
		<width>800</width>
		<height>330</height>
	</operation>
</list>
Ese XML lo traigo como texto, y creo un xml document con la siguiente función.
Código:
	this.stringToXML = function (text) {
		if (window.ActiveXObject){
			var doc=new ActiveXObject('Microsoft.XMLDOM');
			doc.async='false';
			doc.loadXML(text);
		} else {
			var parser=new DOMParser();
			var doc=parser.parseFromString(text,'text/xml');
		}
		return doc;
	};
El problema es que si el tag content (o supongo que cualquier otro también) contiene mas de 5280 caracteres, trunca el resto. En ese campo yo traigo un bloque de HTML, y no me viene completo si mide mas de 5280 caracteres.

Vi que la variable de tipo String no debería tener un limite así de bajo, el xml al browser llega correctamente (comprobado con firebug) pero el problema aparece luego de la conversión a XML document.

Alguien sabe como corregir este problema??

Slds
  #2 (permalink)  
Antiguo 19/02/2011, 15:32
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Problema con xml document

buenas...

nunca he sabido o leido de la existencia de un limite. me gustaria ver un ejemplo para ver que esta sucediendo. sin embargo, ¿no sera que el contenido de <content> lo esta interpretando como tags xml y no como contenido literal? prueba a poner el contenido dentro de un CDATA.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 19/02/2011, 16:12
Avatar de ezefarina  
Fecha de Ingreso: junio-2009
Mensajes: 91
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Problema con xml document

Hola zerokilled. Gracias por responder. El CDATA ya lo probé sin novedades. Y digo que tal vez sea por un tema de límites debido a que se corta el texto en una parte del HTML que no solo no tiene nada especial sino que es codigo repetido antes en el mismo valor. Adjunto el ejemplo real sobre el que se corta y marco con (ACA SE CORTA) donde se corta


<list><operation><windowID>messages_center_w_tem p</windowID><operationID>closeWindowOP</operationID></operation><operation><id>messages_center_w</id><title>Centro de Mensajes</title><content>&lt;div style=&quot;position:relative;overflow:auto;scroll bars:true;height:300px;&quot;&gt;&#x0D;
&lt;table id=&quot;messages_center_table&quot; cellspacing=&quot;1&quot; class=&quot;tablesorter&quot; style=&quot;width:758px;&quot;&gt; &#x0D;
&lt;thead&gt; &#x0D;
&lt;tr&gt; &#x0D;
&lt;th&gt;Asunto&lt;/th&gt; &#x0D;
&lt;th&gt;Fecha&lt;/th&gt; &#x0D;
&lt;th&gt;Mensaje&lt;/th&gt; &#x0D;
&lt;th&gt;&lt;/th&gt; &#x0D;
&lt;/tr&gt; &#x0D;
&lt;/thead&gt; &#x0D;
&lt;tbody&gt;&#x0D;
&lt;tr id=&quot;messages_center_tr_7&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Otro mensage mas mas&lt;/td&gt; &#x0D;
&lt;td&gt;19/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba&lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_7&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_7').removeClass('odd');jQuery('#messages_center _link_7').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&#x0D;
&lt;/tr&gt; &lt;tr id=&quot;messages_center_tr_8&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Otro mensage mas mas&lt;/td&gt; &#x0D;
&lt;td&gt;19/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba&lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_8&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_8').removeClass('odd');jQuery('#messages_center _link_8').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&#x0D;
&lt;/tr&gt; &lt;tr id=&quot;messages_center_tr_9&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Otro mensage mas mas&lt;/td&gt; &#x0D;
&lt;td&gt;19/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba&lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_9&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_9').removeClass('odd');jQuery('#messages_center _link_9').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&#x0D;
&lt;/tr&gt; &lt;tr id=&quot;messages_center_tr_10&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Otro mensage mas mas&lt;/td&gt; &#x0D;
&lt;td&gt;19/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba&lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_10&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_10').removeClass('odd');jQuery('#messages_cente r_link_10').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&#x0D;
&lt;/tr&gt; &lt;tr id=&quot;messages_center_tr_11&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Otro mensage mas mas&lt;/td&gt; &#x0D;
&lt;td&gt;19/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba&lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_11&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_11').removeClass('odd');jQuery('#messages_cente r_link_11').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&#x0D;
&lt;/tr&gt; &lt;tr id=&quot;messages_center_tr_5&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Otro mensage mas&lt;/td&gt; &#x0D;
&lt;td&gt;18/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Este es un mensaje de prueba&lt;br/&gt;&lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_5&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_5').removeClass('odd');jQuery('#messages_center _link_5').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&#x0D;
&lt;/tr&gt; &lt;tr id=&quot;messages_center_tr_6&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Otro mensage mas mas&lt;/td&gt; &#x0D;
&lt;td&gt;18/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba Este &lt;b&gt;NO&lt;/b&gt; es un mensaje de prueba &lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_6&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_6').removeClass('odd');jQuery('#messages_center _link_6').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&#x0D;
&lt;/tr&gt; &lt;tr id=&quot;messages_center_tr_3&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Bienvenido a &lt;b&gt;Censere Software&lt;/b&gt;&lt;/td&gt; &#x0D;
&lt;td&gt;17/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Este es tu 1er Mensaje&lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_3&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_3').removeClass('odd');jQuery('#messages_center _link_3').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;(ACA SE CORTA)&lt;/td&gt;&#x0D;
&lt;/tr&gt; &lt;tr id=&quot;messages_center_tr_4&quot; class=&quot;odd&quot;&gt; &#x0D;
&lt;td&gt;Actualización Instalada&lt;/td&gt; &#x0D;
&lt;td&gt;17/02/2011&lt;/td&gt; &#x0D;
&lt;td&gt;Se ha instalado la versión 1.2.3&lt;/td&gt;&#x0D;
&lt;td&gt;&lt;a id=&quot;messages_center_link_4&quot; onmouseout=&quot;UnTip();&quot; onmouseover=&quot;Tip('Marcar como leído');&quot; href=&quot;#&quot; onclick=&quot;javascript:jQuery('#messages_center_ tr_4').removeClass('odd');jQuery('#messages_center _link_4').style.display='none';&quot;&gt;&lt;img src=&quot;http://static.censere.com.ar/images/...mini.png&quot; style=&quot;float:right;&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&#x0D;
&lt;/tr&gt; &#x0D;
&lt;/tbody&gt; &#x0D;
&lt;/table&gt;&#x0D;
&lt;/div&gt;&#x0D;
</content><maximizable>false</maximizable><width>800</width><height>330</height><operationID>newWindowOP</operationID></operation><operation><script>jQuery('#messages_cen ter_table').tablesorter();</script><operationID>runScriptOP</operationID></operation></list>

El contenido que queda luego del corte se muestra perfectamente. Incluso el XML que continua luego del corte llega bien.. SOLO se corta el content al llegar a los 5280 chars. Si yo agrego un par de caracteres al principio, el texto se corta 2 caracteres antes. El problema es claramente un tema de límite. No creo que sea del propio String, pero si tal vez del xml document
  #4 (permalink)  
Antiguo 19/02/2011, 16:39
Avatar de ezefarina  
Fecha de Ingreso: junio-2009
Mensajes: 91
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Problema con xml document

Acá encontré que SI hay un límite, en el XML document, y el límite depende del número que le haya gustado a cada browser :P
Aparentemente cuando excede el límite crea childs del nodo de texto que contiene el texto mismo splitteado.

http://stackoverflow.com/questions/1...aracter-limit-
for-javascript-xml-text-nodes


Antes de publicar de nuevo me puse a probar estas cosas de stackoverflow y metí en medio de lo que recorre el XML que cuando se encuentra con este tipo de campos, recorra sus childs también concatenandolos.

Conclusión: Si el browser considera que un campo de un xml document es demasiado largo (longitud definida por el browser) crea automáticamente en el nodo "largo" childNodes con el valor general del padre, splitteado N veces de manera tal que la longitud de ningún nodo exceda los límites establecidos.
Horrible pero real :P
  #5 (permalink)  
Antiguo 19/02/2011, 17:15
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Problema con xml document

personalmente me es interesante, de hecho te agradezco que compartieras ese detalle. ciertamente no es problema de la clase String de javascript. de hecho, tamoco es problema de XML. el culpable es el parser XML, y por supuesto, segun sea el navegador. en chrome no me sucedio. sin embargo, en firefox me limitaba a 4096 caracteres. lo curioso es que si agrego el contenido en un CDATA no divide el contenido en distintos nodos. una solucion bien rapida para unir los nodos es utilizando la funcion normalize el cual toma todos los nodos tipo text contiguos y los une en uno solo; en lugar de tener que recorrer por todos ellos como la solucion que expone stackoverflow.

¿como determine que el culpable es el parser (DOMParser)?
si ese mismo documento xml lo creas en un archivo *.xml y lo cargas con XMLHttpRequest, luego buscas el elemento y verifica sus nodos, veras que solo aparece uno de tipo texto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 19/02/2011 a las 17:47 Razón: error de mi parte :stress:
  #6 (permalink)  
Antiguo 20/02/2011, 00:04
Avatar de ezefarina  
Fecha de Ingreso: junio-2009
Mensajes: 91
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Problema con xml document

Buen dato el del normalize. No lo conocía, por eso directamente desarrollé un "joiner". Mañana lo estaré probando. Queda mas prolijo.

Gracias, Slds

Etiquetas: ajax, document, limite, string, 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 05:45.