2011-12-01 36 views
6

我正在使用Javascript生成XML。如果XML中沒有特殊字符,它會正常工作。否則,它會生成此消息:「無效的xml」。如何在JavaScript中使用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。例如:

var c = document.createElement("category"); 
c.setAttribute("label", "ARR Builders & Developers"); 
var s = new XMLSerializer().serializeToString(c); 
s; // => "<category label=\"ARR Builder &amp; Developers\"></category>" 

此策略應該避免您提到的XML實體轉義問題,但可能存在一些跨瀏覽器問題。

2

這將做在JavaScript更換:

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

這使用regular expression literals他們逃脫相當於取代比小於符號都越來越大。

1

JavaScript爲字符串對象提供了強大的replace()方法。

一般 - 和基礎 - 方面,它的工作原理是這樣的:

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

的第一個參數.replace()方法是要替換原始字符串的一部分。它可以用簡單的字符串對象(即使是文字)或正則表達式來表示。

正則表達式顯然是選擇子串的最有效方式。

第二個參數是您希望作爲替換提供的字符串對象(即使是文字)。

在你的情況下,更換操作應該如下所示:

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

注意到的第一件更換操作的符號,因爲如果你要稍後再嘗試替換它,你會搞砸了預先存在良好肯定引用的實體,就像"&amp;gt;"

此外,請注意正則表達式的'g'標誌,因爲替換將發生在整個文本中,而不僅僅是在第一場比賽中。

我使用了正則表達式,但對於這些簡單的替換,普通字符串也是一個完美的匹配。

你可以找到一個完整的參考String.replace()here

+0

這裏使用的正則表達式只會分別替換&和>的_first_實例。您需要使用全局標誌來使正則表達式匹配_all_實例,例如'/&/ g'。 – jabclab

+0

@jakeclarkson:你說得對。我將在我的編輯中指定。謝謝。 –

+0

我認爲即使使用簡單的字符串構造XML可能相當容易(但對於複雜結構往往更容易出現問題),@maerics具有最具結構化和「精益求精」的解決方案。 –

相關問題