我正在使用Javascript生成XML。如果XML中没有特殊字符,它可以正常工作。否则,它将生成此消息:“invalid xml”。
我尝试替换一些特殊字符,例如:
xmlData=xmlData.replaceAll(">",">");
xmlData=xmlData.replaceAll("&","&");
//but it doesn't work.
例如:
<category label='ARR Builders & Developers'>
感谢。
答案 0 :(得分:4)
考虑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 & Developers\"></category>"
此策略应避免XML实体转移您提及但可能存在一些跨浏览器问题的问题。
答案 1 :(得分:2)
这将在JavaScript中进行替换:
xml = xml.replace(/</g, "<");
xml = xml.replace(/>/g, ">");
这使用regular expression literals替换所有小于和大于符号的转义等价物。
答案 2 :(得分:1)
JavaScript为字符串对象提供了强大的replace()
方法。
一般而言 - 基本术语,它的工作原理如下:
var myString = yourString.replace([regular expression or simple string], [replacement string]);
.replace()
方法的第一个参数是您要替换的原始字符串的一部分。它可以由普通字符串对象(甚至是文字对象)或正则表达式表示。
正则表达式显然是选择子字符串的最有效方法。
第二个参数是您想要作为替换提供的字符串对象(甚至是文字)。
在您的情况下,替换操作应如下所示:
xmlData=xmlData.replace(/&/g,"&");
xmlData=xmlData.replace(/>/g,">");
//this time it should work.
请注意,第一个替换操作是&符号,就好像您应该稍后尝试替换它一样,您可能会将预先存在的引用良好的实体搞砸,就像"&gt;"
一样。
此外,请注意正则表达式'g'标志,因为替换将在整个文本中进行,而不仅仅是在第一场比赛中。
我使用正则表达式,但对于像这样的简单替换,普通字符串也是完美的选择。
您可以找到String.replace()
here的完整参考。