風之力

          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 風之力 閱讀(551) 評論(0)  編輯  收藏 所屬分類: xml

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 寻乌县| 成武县| 高平市| 仁寿县| 淮南市| 老河口市| 和田市| 闵行区| 翁源县| 大姚县| 亚东县| 五指山市| 德江县| 会同县| 翁源县| 南通市| 玛纳斯县| 贡觉县| 崇仁县| 九龙城区| 扶绥县| 杭锦后旗| 梅州市| 黑龙江省| 永康市| 墨竹工卡县| 竹山县| 香格里拉县| 革吉县| 宜兰县| 东港市| 舟山市| 乐业县| 县级市| 科尔| 合作市| 河东区| 新绛县| 于田县| 廉江市| 龙海市|