【问题标题】:XML parse Error javascript servletXML解析错误javascript servlet
【发布时间】:2011-05-18 01:54:39
【问题描述】:

我有一个将 XML 响应发送到 JavaScript 的简单 servlet 应用程序。 当我签入我的 Firebug 时,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&amp;T,0.51851370625875,0.97944711419669,Verizon,0.47641942539114,0.99005717081381,wifi,0.48596657869633,0.88912486160201) 存储在 javascript 数组中。

有什么想法吗?

【问题讨论】:

  • 请按照帮助部分的说明将代码缩进四个空格。

标签: java javascript xml servlets


【解决方案1】:

问题是 AT&T 中的 &。您必须转义该字符而不是逗号。

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

替换应该是 &amp;#38; 用于&符号

【讨论】:

    【解决方案2】:

    如前所述,这不是有效的 XML。 &amp; 是 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

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多