如何使用xAgent读取RSS提要?
问题描述:
我试图用xAgent读取外部RSS源,我似乎gettig XML错误,如一旦跌破,我怀疑这是因为我使用的BufferedReader如何使用xAgent读取RSS提要?
我得到这样的错误逐行读取XML行这些
- “错误在第1行的列32:在文档的末尾附加内容”“:打开和结束标记不匹配:项目行0和通道在柱6561的错误在第1行”
在这里,我s我试过的东西
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">
<xp:this.afterRenderResponse>
<![CDATA[#{javascript:
var u:java.net.URL = new java.net.URL("http://www.xpages.info/XPagesHome.nsf/NewsFeed.xsp?format=rss");
var br:BufferedReader= new java.io.BufferedReader(new java.io.InputStreamReader(u.openStream()));
var tmp="";
while(br.readLine() != null){
tmp+= br.readLine();
}
var externalContext = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = externalContext.getResponse();
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
writer.write(tmp);
writer.endDocument();
}]]>
</xp:this.afterRenderResponse>
</xp:view>
答
您正在使用XAgent作为代理。如果你想实际做更多,我建议使用更好的类。最低限度将是HTTP客户端(处理所有连接干扰),或者如果您的源代码是ATOM,则Apache Abdera类(其内部使用HTTP客户端)。
你有问题:流还包含头信息,所以你的XML不能<启动。使用HTTP客户端可以避免这种情况。
有点像这样:
public String getURL(String url) {
System.out.println("Fetching " + url);
if (this.httpClient == null) {
this.initializeHTTPSession();
}
ResponseHandler<String> responseHandler = new BasicResponseHandler();
HttpGet get = new HttpGet(url);
String result = null;
try {
result = this.httpClient.execute(get, responseHandler);
} catch (HttpResponseException e) {
System.out.println(e.getMessage());
return null;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
result = "The host is invalid: " + url;
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
完整的源代码在这里:http://www.wissel.net/blog/downloads/SHWL-8BQPJD/ $文件/ HTTPReader.java
你可能想使用别的东西比为响应处理的字符串。