2012-09-05 8 views
9

Tengo una rutina de javascript que toma una secuencia XML a través de AJAX y luego la analiza. Funciona bien en FF y Chrome, pero en IE 9, si hay Line Feeds consecutivos dentro de un nodo, IE los comprime en un espacio y un salto de línea.IE 9 comprime el espacio en blanco dentro de XML DOM

Específicamente, donde retNode es un nodo xml, retNode.text tiene el espacio en blanco comprimido en IE, pero incluye todos los caracteres en FF y Chrome.

He intentado escribir mi propia rutina para analizar el XML, pero eso parece frágil y una pérdida de tiempo. Intenté usar la propiedad PreserveWhitespace, pero eso no parece estar disponible en javascript. Intenté usar retNode.nodeValue en lugar de retNode.text, pero nodeValue no tenía ningún valor.

Preferiría una solución que no use jquery porque no conozco jquery, y no estoy seguro de qué otro código necesitaría agregar para hacer que jquery funcione.

¡Gracias de antemano!

+3

Debe usar 'CDATA' o algo así, si espera que se conserve su espacio en blanco. ¿Puedes modificar esta fuente XML? – Brad

+0

En el caso general, el tratamiento del espacio en blanco en XML depende de la gramática del documento: DTD o XSD. Ha pasado demasiado tiempo desde que miré el comportamiento del navegador en esta área para dar una respuesta. – McDowell

Respuesta

1

preserveWhiteSpace está disponible en JavaScript.

¿Has probado el siguiente código?

var xhr = new XMLHttpRequest(); 
xhr.responseXML.preserveWhiteSpace = true; 
… 
+0

'preserveWhiteSpace' está realmente disponible desde JavaScript en IE, pero intentar acceder a' xhr.responseXML' antes de establecer la conexión dará el siguiente error: 'Los datos necesarios para completar esta operación aún no están disponibles'. Según @JoeFawcett, solía ser posible llamar a 'xhr.responseXML.preserveWhiteSpace = true' con IE8 entre las llamadas' open() 'y' send() ', pero al hacerlo con IE9 se devuelve el siguiente error:' Could not complete la operación debido al error c00c023f'. – avernet

0

Solo debe haber espacios en blanco entre las etiquetas que está perdiendo. El espacio en blanco entre no etiquetas (como entre cadenas dentro de un par de etiquetas) siempre debe conservarse.

En otras palabras, <tag> </tag> se convertirá en <tag></tag> mientras que <tag>foo bar</tag> se mantendrá inalterado.

Si necesita espacio en blanco entre dos etiquetas que se conserva, y preserveWhiteSpace no está trabajando para usted por alguna razón, entonces creo que tendrá que poner &#160; en su origen XML si es posible (la versión numérica de la que &nbsp; no se puede usar, ya que es un carácter XML ilegal en circunstancias normales, es decir, a menos que haya definido la entidad)

+1

Un espacio simple es diferente a un espacio no rompible, por lo que la solución que propone no es estrictamente equivalente a lo que la persona que hizo la pregunta está intentando hacer. – avernet

Cuestiones relacionadas