XML解析错误javascript servlet

时间:2011-05-18 01:54:39

标签: java javascript xml servlets

我有一个简单的servlet应用程序,它向JavaScript发送XML响应。 当我签入我的Firebug时,这个resposonse被JavaScript收到

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

这是一个完全有效的XML响应 - 但Firebug也显示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...

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

我通过

从Servlet生成我的回复
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中,我尝试将数据检索为

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数组中。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

问题是&amp;在AT&amp; T.你必须逃脱那个角色而不是逗号。

您在第一个逗号处收到错误的原因是它正在尝试将&amp; T解析为html字符。

对于&符号,替换应为&#38;

答案 1 :(得分:0)

如上所述,这不是有效的XML。 &是XML中的特殊字符。

您希望使用Apache Commons Lang StringEscapeUtils#escapeXml()来转义XML中的特殊字符。首先下载commons-lang-2.6.jar,将其放在/WEB-INF/lib文件夹中,并按如下方式替换servlet的最后一行:

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

对具体问题

无关String+=的并置循环效率非常低。请考虑改为使用StringBuilder