XML解析错误javascript servlet
问题描述:
我有一个简单的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数组中。
任何想法?
答
问题是AT &中的& T.您必须避开该字符而不是逗号。
您在第一个逗号出现错误的原因是它试图将& T解析为html字符。
的更换应该是&
一个符号
答
至于说,这不是有效的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
代替。
请按照帮助部分所述,使用四个空格缩进代码。 – SLaks 2011-05-18 01:59:54