Я не уверен, что кто-то еще сталкивался или спрашивал об этом раньше, но для моего приложения я использую два 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/
В любом случае, любая помощь была бы невероятно полезной.