2012-09-05 15 views
9

私はAJAXを介してXMLストリームを取得して解析するjavascriptルーチンを持っています。 FFやChromeでは正常に動作しますが、IE 9では、ノード内に連続した改行があると、IEはそれらをスペースと1つの改行に圧縮します。IE 9はXML DOM内の空白を圧縮します

具体的には、retNodeがxmlノードの場合、retNode.textにはIEの圧縮された空白が含まれますが、FFとChromeのすべての文字が含まれます。

私はXMLを解析する独自のルーチンを作成しようとしましたが、これは壊れやすく時間が掛かりそうです。 PreserveWhitespaceプロパティを使用してみましたが、javascriptでは使用できないようです。 retNode.textの代わりにretNode.nodeValueを使ってみましたが、nodeValueに値がありませんでした。

私はjqueryを知らないので、jqueryを使用しないソリューションが好きですし、jqueryを動作させるために追加する必要があるコードが何であるかわかりません。

ありがとうございます!

+3

空白を保持すると思われる場合は、 'CDATA'などを使用してください。このXMLソースを変更できますか? – Brad

+0

一般的なケースでは、XMLにおける空白の扱いは、DTDやXSDのような文書の文法に依存します。私はこのエリアのブラウザの動作を調べて答えを得てから、それは長すぎるです。 – McDowell

答えて

1

preserveWhiteSpaceはJavaScriptで利用可能です。

次のコードを試しましたか?

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

'preserveWhiteSpace'はIE上のJavaScriptから実際に利用可能ですが、接続を確立する前に' xhr.responseXML'にアクセスしようとすると 'この操作を完了するために必要なデータはまだ利用できません。 @JoeFawcettによると、 'open()'と 'send()'を呼び出す間にIE8で 'xhr.responseXML.preserveWhiteSpace = true'を呼び出すことは可能でしたが、IE9でこれを行うと、次のエラーが返されます。エラーc00c023f'による操作を完了してください。 – avernet

0

あなたが失っているタグ間の空白でなければなりません。非タグ間の空白(タグのペア内の文字列間など)は常に保持する必要があります。

つまり、<tag> </tag><tag></tag>になりますが、<tag>foo bar</tag>は変更されません。

あなたが保存されるために、2つのタグの間の空白を必要とし、preserveWhiteSpaceが何らかの理由であなたのために働いていない場合、私は(あなたが可能な場合は、あなたのXMLソースに&#160;を置く必要があるでしょうと思います&nbsp;の数値バージョンあなたは通常の状況下では、エンティティを定義していない限り、不正なXML文字であるため使用できません。

+1

平易なスペースは壊れないスペースとは異なります。したがって、あなたが提案する解決策は、質問した人物が行っていることと厳密に同じではありません。 – avernet

関連する問題