2011-12-01 7 views
6

JavaScriptを使用してXMLを生成しています。 XMLに特殊文字がないと正常に動作します。それ以外の場合は、 "invalid xml"というメッセージが生成されます。例えばJavaScriptを使用してXMLファイルに&>のような特殊文字を追加する方法

xmlData=xmlData.replaceAll(">",">"); 
xmlData=xmlData.replaceAll("&","&"); 
//but it doesn't work. 

<category label='ARR Builders & Developers'> 

おかげ

は、私のような、いくつかの特殊文字を置き換えることを試みました。

+0

http://stackoverflow.com/questions/2327663/xml-safe-urlencoding – cederlof

+2

XMLを生成する場合は、XMLライブラリを使用し、文字列をマッシュしないでください。そういうわけで、狂気がある。 – Quentin

+0

'replaceAll()'はJavaScriptではデフォルトでは使用できません。 'String 'を拡張しない限り、グローバルな正規表現に' replace() 'を使わなければなりません。プロトタイプ 'には' replaceAll'が含まれています。 '良くありません。 – jabclab

答えて

3

generating the XML using DOM methodsを検討してください。例:

この戦略では、XMLエンティティがあなたの問題をエスケープするのを避ける必要がありますが、いくつかのクロスブラウザの問題があります。

2

これはJavaScriptでの交換を行います:これは彼らのエスケープ同等とシンボル以外のすべてよりも少ないと大きなを置き換えるためにregular expression literalsを使用しています

xml = xml.replace(/</g, "&lt;"); 
xml = xml.replace(/>/g, "&gt;"); 

を。

1

JavaScriptには、文字列オブジェクト用の強力なreplace()メソッドが付属しています。基本 - - 一般的に

用語、それはこのように動作します:.replace()方法に

var myString = yourString.replace([regular expression or simple string], [replacement string]); 

最初の引数はあなたが交換したい元の文字列の一部です。プレーンな文字列オブジェクト(リテラルでも)でも正規表現でも表現できます。

正規表現は、明らかに部分文字列を選択する最も強力な方法です。

第2引数は、置換する文字列オブジェクト(リテラルでも可)です。あなたのケースでは

は、のようになり、交換作業は次のとおりです。あなたが後でそれを交換しようとする必要がある場合は、あなたが台無しと同じように

xmlData=xmlData.replace(/&/g,"&amp;"); 
xmlData=xmlData.replace(/>/g,"&gt;"); 
//this time it should work. 

お知らせが最初の交換作業は、既存のよくアンパサンドです引用されたエンティティは、確かに"&amp;gt;"と同じです。

さらに、regex 'g'フラグに注意してください。最初の一致だけでなく、テキスト全体に置換が行われます。

正規表現を使用しましたが、これらのような単純な置換でも、プレーンな文字列は完璧にフィットします。

String.replace()hereの完全なリファレンスを見つけることができます。

+0

正規表現を実行している場合であっても、XMLはエラーを生成のみそれぞれ>と&の_first_インスタンスを置き換えます。正規表現を_all_インスタンスに一致させるには、グローバルフラグを使用する必要があります。 '/&/ g'。 – jabclab

+0

@ jakeclarkson:そうです。これを私の編集で指定します。ありがとうございました。 –

+0

私は単純な文字列でXMLを構築する(複雑な構造のため、しかし、頭痛にしばしば、より傾斜)かなり容易にすることができたとしても@maericsは、ほとんどの構造化と「礼儀」のソリューションを持っていると思います。 –

関連する問題