访问RSS源时出现奇怪的空白错误

时间:2011-07-29 20:43:28

标签: java rss whitespace yahoo feed

我不确定是否有其他人曾经遇到或询问此事,但对于我的应用程序,我使用了两个Yahoo! RSS订阅:热门新闻和天气预报。我刚开始使用这些的想法,但从我读过的内容来看,我只需要对特定的URL发出HTTP GET请求以检索XML文件,我可以解析它以获取我想要的信息。我让解析器工作得很好,因为我用每个feed中的一个示例XML文件测试它;但是,当我使用对URL的AJAX GET调用时发生了一个奇怪的错误:

无法显示XML页面 无法使用XSL样式表查看XML输入。请更正错误,然后单击“刷新”按钮,或稍后重试。


Whitespace is not allowed at this location. 
Error processing resource 'http://localhost:8080/BBS/fservlet?p=n'. Line 28, P...

    for (i = 0; i < s.length; i++){
-------------------^

请注意,我目前使用Tomcat在本地系统上部署了此应用程序“BBS”​​。我查看了像这样的空白错误,并且大多数似乎都指向XML文件本身存在问题的某些行。在大多数情况下,它与逃避“&amp;”有关。符号,但似乎IE告诉我错误是在for循环中。我不是XML专家,但我从来没有在XML中看过for循环。即便如此,我已经直接在我的浏览器中访问了URL并查看了XML文件(它是我用来测试解析的文件)并且没有找到这样的行。另外,我的代码中的任何地方都不存在这样的循环。换句话说,我不确定这是我的错误,还是某些配置设置。这是我正在使用的代码,但是:

jQuery代码

// Located in my JSP file
var baseContext = "<%=request.getContextPath()%>";
$(document).ready(function() {
    ParseWeather();
    ParseNews();
}

// Located in a separate JS file
function ParseWeather() {
    $.get(baseContext + "/servlet?p=w", function(data) {
        // XML Parser
    }
    // Data Manipulation
}

function ParseNews() {
    $.get(baseContext + "/servlet?p=n", function(data) {
        // XML Parser
    }
    // Data Manipulation
}

Java代码

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.http.HttpServlet;
import java.net.URL;

public class FeedServlet extends HttpServlet {
    protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
        try {
            response.setContentType("text/xml");
            final URL url;
            String line = "";

            if(request.getParameter("p").equals("w")) {
                // Configuration setting that returns: "http://xml.weather.yahoo.com/forecastrss?p=USOR0186"
                url = new URL(AppConfiguration.getInstance().getForcastUrl());
            } else {
                // Configuration setting that returns: "http://news.yahoo.com/rss/"
                url = new URL(AppConfiguration.getInstance().getNewsUrl());
            }
            final BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream());
            final PrintWriter writer = response.getWriter();

            while((line = reader.readLine()) != null) {
                writer.println(line);
                writer.flush();
            }
            writer.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

我的公司有一个AppConfiguration类,允许通过配置页面更改某些变量,如URL。无论如何,这两个电话简单地返回了网址......

雅虎!预告RSS Feed:     http://xml.weather.yahoo.com/forecastrss?p=USOR0186

雅虎!新闻:热门新闻Feed:     http://news.yahoo.com/rss/

无论如何,任何帮助都会非常有帮助。

1 个答案:

答案 0 :(得分:0)

for (i = 0; i < s.length; i++){

错误位于小于符号,这意味着XML解析器正在读取您的源代码!使用WGET获取资源并检查是否返回了实际的XML而不是源代码。