2011-05-18 58 views
0

我有一个简单的servlet应用程序,它向JavaScript发送XML响应。 当我在Firebug的检查,这resposonse是由JavaScript收到XML解析错误javascript servlet

<valid> AT&T,0.51851370625875,0.97944711419669,Verizon,0.47641942539114,0.99005717081381,wifi,0.48596657869633,0.88912486160201 </valid> 

这是一个完全有效的XML响应 - 而萤火虫也显示XML错误

XML Parsing Error: not well-formed Location: moz-nullprincipal:{30f70c51-7f01-48b4-9f69-4f0093e02ba6} Line Number 1, Column 12: 
<valid>AT&T,0.51851370625875,0.97944711419669,Verizon,0.47641942539114,0.9900571... 

它显示了错误的第一逗号 - 这根本没有意义。我甚至尝试用空格替换逗号 - 但即使这样也会产生相同的问题。

我产生由

String ret=""; 

for (int i=0; i < ping.size(); i++) 
{ 

    ret += ping.get(i) ; 
    if(i != ping.size()-1){ 
     ret += ","; 
    }     
} 

response.setContentType("text/xml");   
response.setHeader("Cache-Control", "no-cache"); 

response.getWriter().write("<valid>"+ret+"</valid>"); 

而且在我的JavaScript我从Servlet的响应,我尝试检索数据

var message = xmlHttp.responseXML.getElementsByTagName("valid")[0].childNodes[0].nodeValue; 

我以前使用完全相同的方法 - 不知道这是为什么不再工作了。 我需要做的就是将值(AT&T,0.51851370625875,0.97944711419669,Verizon,0.47641942539114,0.99005717081381,wifi,0.48596657869633,0.88912486160201)存储在一个javascript数组中。

任何想法?

+0

请按照帮助部分所述,使用四个空格缩进代码。 – SLaks 2011-05-18 01:59:54

回答

2

问题是AT &中的& T.您必须避开该字符而不是逗号。

您在第一个逗号出现错误的原因是它试图将& T解析为html字符。

的更换应该是&#38;一个符号

0

至于说,这不是有效的XML。 &是XML中的一个特殊字符。

您想使用Apache Commons LangStringEscapeUtils#escapeXml()来转义XML中的特殊字符。首先下载commons-lang-2.6.jar,砸在/WEB-INF/lib文件夹,替换你的servlet的最后一行如下:

response.getWriter().write("<valid>" + StringEscapeUtils.escapeXml(ret) + "</valid>"); 

无关到具体的问题,您有+=String串联循环是非常低效。请考虑使用StringBuilder代替。