Странная ошибка при доступе к RSS-каналу - PullRequest
0 голосов
/ 30 июля 2011

Я не уверен, что кто-то еще сталкивался или спрашивал об этом раньше, но для моего приложения я использую два Yahoo! RSS-каналы: главные новости и прогноз погоды. Я новичок в идее использовать их в первую очередь, но из того, что я прочитал, мне просто нужно сделать HTTP-запрос GET на определенный URL-адрес, чтобы получить файл XML, который я могу проанализировать для получения информации, которую я хочу , У меня синтаксический анализатор работает нормально, так как я тестировал его с примером файла XML из каждого канала; однако странная ошибка возникает, когда я использую вызов AJAX GET для URL:

Страница XML не может быть отображена Невозможно просмотреть ввод XML с использованием таблицы стилей XSL. Пожалуйста, исправьте ошибку и затем нажмите кнопку Обновить, или повторите попытку позже.


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++){
-------------------^

Обратите внимание, что у меня есть это приложение "BBS", в настоящее время развернутое в моей локальной системе с Tomcat. Я посмотрел на подобные пробельные ошибки, и большинство, похоже, указывают на какую-то строку в самом файле XML, в которой возникла проблема. В большинстве случаев это было связано с экранированием символа «&», но похоже, что IE говорит мне, что ошибка находится внутри цикла for. Я не эксперт по XML, но я никогда не видел цикл for в XML. Тем не менее, я зашел по ссылке прямо в браузере и просмотрел файл 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, на странице конфигурации. В любом случае, эти два вызова просто возвращают URL-адреса ...

Yahoo! Forcast RSS Feed: http://xml.weather.yahoo.com/forecastrss?p=USOR0186

Yahoo! Новости: Лента главных новостей: http://news.yahoo.com/rss/

В любом случае, любая помощь была бы невероятно полезной.

1 Ответ

0 голосов
/ 30 июля 2011
for (i = 0; i < s.length; i++){

Ошибка в символе меньше, что означает, что анализатор XML читает ваш исходный код!Используйте WGET, чтобы получить ресурс и проверить, что возвращается фактический XML, а не исходный код.

...