风之力

BlogJava 首页 新随笔 联系 聚合 管理
  19 Posts :: 2 Stories :: 18 Comments :: 0 Trackbacks
   无聊想写个读取RSS的东东,思路比较清晰:
⒈用ajax根据url抓取xml数据;
⒉解析数据,提取有用的信息;
⒊将提取出来的数据以合理的方式显示。
本来以为比较简单的,谁知道在第一步就卡住了。首先,ajax存在跨域问题,直接抓取没有权限。那只好后台用URL去取。
可是抓回来的xml文件,只要有中文就是乱码。用new(string.getByte(),"UTF-8")解码,会出现中文部分乱码。抓取代码如下:
简单总结问题原因:读取xml文件流的时候要使用相符合的编码方式。一般xml都是用UTF-8编码,而系统的默认读取应该是GBK
(简体中文)。上一点只是猜想:因为我用new(string.getByte(),"UTF-8"),用的是默认GBK读取,可以解出部分中文。
所以因该在读取xml时候指定编码,下面代码注释1。
解出的代码,如果直接传回ajax处理,会得步到xml对象。细看下最后输出得xml文件,发现最后多了一个"?"。这个问号因该是
用来表明xml结束的。但是dom对xml格式要求和严格,所以直接给回肯定是的不到responseXML.documentElement对象的。去掉后
可以正常解析。
 1public class GetRss extends HttpServlet
 2{
 3    private static final Logger logger = Logger.getLogger(GetRss.class);
 4   
 5    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
 6    {
 7        String url = request.getParameter("RssUrl");
 8        logger.info(url);
 9        try
10        {
11            URL RssUrl = new URL(url);
12            InputStream stream = RssUrl.openStream();
13            BufferedReader in = new BufferedReader(new InputStreamReader(stream),"UTF-8");//1
14            boolean loop = true
15            StringBuffer sb = new StringBuffer(); 
16
17           
18            while (loop) 
19            if ( in.ready() ) 
20            int i=0
21            while (i!= -1
22                i = in.read();
23                sb.append((char)i);
24            }
 
25            loop = false
26            }
 
27            }

28            int len = sb.length();
29            String out = sb.substring(0, len-1);//2
30            response.setContentType("text/xml;charset=utf-8");
31            response.setHeader("Cache-Control""no-cache");
32            
33            PrintWriter pw=new PrintWriter(new OutputStreamWriter(response.getOutputStream(),"UTF-8"));
34            pw.write(out);
35            pw.close();
36        }

37        catch (MalformedURLException e)
38        {
39            
40            logger.error("GetRss.execute Error. " + e.getMessage());
41        }

42        catch (IOException e)
43        {
44            logger.error("GetRss.execute Error. " + e.getMessage());
45        }
     
46    }

47
48}

posted on 2006-10-20 20:09 风之力 阅读(542) 评论(0)  编辑  收藏 所属分类: xml

只有注册用户登录后才能发表评论。


网站导航: