2012-09-05 16 views
9

Ho una routine javascript che acquisisce un flusso XML tramite AJAX e quindi lo analizza. Funziona bene in FF e Chrome ma in IE 9, se ci sono feed di riga consecutivi all'interno di un nodo, IE li comprime in uno spazio e un feed di riga.IE 9 comprime lo spazio bianco all'interno di DOM XML

In particolare, dove retNode è un nodo xml, retNode.text ha lo spazio bianco compresso in IE, ma include tutti i caratteri in FF e Chrome.

Ho provato a scrivere la mia routine per analizzare l'XML, ma sembra fragile e una perdita di tempo. Ho provato a utilizzare la proprietà PreserveWhitespace, ma non sembra essere disponibile in javascript. Ho provato a usare retNode.nodeValue invece di retNode.text, ma nodeValue non aveva valore.

Preferirei una soluzione che non utilizzi jQuery perché non conosco jquery e non sono sicuro di quale altro codice avrei bisogno di aggiungere per far funzionare jquery.

Grazie in anticipo!

+3

È necessario utilizzare 'CDATA' o qualcosa del genere, se si prevede che gli spazi bianchi vengano mantenuti. Puoi modificare questa sorgente XML? – Brad

+0

Nel caso generale, il trattamento degli spazi bianchi in XML dipende dalla grammatica del documento: DTD o XSD. È passato troppo tempo da quando ho esaminato il comportamento del browser in quest'area per fornire una risposta. – McDowell

risposta

1

preserveWhiteSpace è disponibile in JavaScript.

Hai provato il seguente codice?

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

'preserveWhiteSpace' è effettivamente disponibile da JavaScript su IE, ma provare ad accedere a' xhr.responseXML' prima di stabilire la connessione darà il seguente errore: 'I dati necessari per completare questa operazione non sono ancora disponibili'. Secondo @JoeFawcett, era possibile chiamare 'xhr.responseXML.preserveWhiteSpace = true' con IE8 tra chiamare' open() 'e' send() ', ma farlo con IE9 restituisce il seguente errore:' Impossibile completare l'operazione a causa dell'errore c00c023f'. – avernet

0

Deve essere solo uno spazio tra i tag che si stanno perdendo. Gli spazi bianchi tra non tag (come tra stringhe all'interno di una coppia di tag) devono sempre essere preservati.

In altre parole <tag> </tag> diventa <tag></tag> mentre <tag>foo bar</tag> rimane inalterato.

Se avete bisogno di spazio bianco tra i due tag da conservare, e preserveWhiteSpace non funziona per voi, per qualche motivo, allora penso che si dovrà mettere &#160; nella vostra sorgente XML, se possibile (la versione numerica di cui si &nbsp; non può essere utilizzato in quanto carattere XML illegale in circostanze normali, ovvero a meno che non sia stata definita l'entità)

+1

Uno spazio semplice è diverso da uno spazio non frazionabile, quindi la soluzione che proponi non è strettamente equivalente a ciò che la persona che ha posto la domanda sta tentando di fare. – avernet

Problemi correlati