2011-05-18 123 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代替。