新聞類網站rss介面的編寫心得

來源:互聯網
上載者:User

標籤:

使用的是Jdom中的相關API,具體步驟如下

要求的格式:

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>上千趣,頂有趣</title><description>千趣網,有趣新聞第一彙總平台,生產和提供適合社交網路傳播的各類有趣新聞。</description><link>http://www.qianqu.cc</link><language>zh_CN</language><pubDate>Tue, 06 Sep 2016 13:46:22 +0800</pubDate><item><title><![CDATA[俄羅斯推出女模裸體高速舉牌活動,成效實在是太好了 ]]></title><link>http://127.0.0.1:8080/life/55720.html?from=LieBao&s=cm</link><description><![CDATA[俄羅斯的交通事故發生率非常高,每年有三萬多人因此死亡受傷 ]]></description><content:encoded><![CDATA[<article id="articleContent">
<p style="text-align: left; text-indent: 2em;">俄羅斯的交通事故發生率非常高,每年都有三萬多人因此死亡受傷。為了讓人們意識到超速行駛的危害,當局做了很多努力,效果都不理想。現在他們又做了一個大膽的嘗試,那就是讓半裸美女在街頭舉限速牌,提醒司機不要超速<span style="text-indent: 2em;">很多司機看到後果然將車速放緩,慢了下來。</span>
</p><p style="text-align: center; text-indent: 2em;"><img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636321029057.jpg"/></p><p style="text-align: left; text-indent: 2em;">因為美女的顏值太高了,當她們在路邊舉牌的時候路過的車輛無一不按照規定限速安全駕駛。當局讓半裸美女舉限速標誌,就是為了讓人們放慢車速,不管是要看美女還是看限速牌,只要慢下來就是成功。
</p><p style="text-align: center; text-indent: 2em;"><img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636507051888.jpg"/></p><p style="text-align: center; text-indent: 2em;"><img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636664041317.jpg"/></p><p style="text-align: center; text-indent: 2em;">
<img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636765052287.jpg"/></p><p style="text-align: center; text-indent: 2em;"><img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636859014104.jpg"/></p><p style="text-align: left; text-indent: 2em;">這就是俄羅斯街頭的情境。
</p><p style="text-align: left; text-indent: 2em;">路邊突然出現半裸美女,司機很容易分神。雖然她們是一番好意,舉牌提醒司機不要超速,但分神帶來的後果可能更加嚴重。之前莫斯科街頭一輛印有女子胸部廣告的卡車就在一天內引發500多起車禍。</p><p style="text-align: left; text-indent: 2em;">和美女一姐打嘴炮、探討不一樣姿勢。添加朋友→公眾號→搜“姿勢情報局一姐”(已認證),太純潔的,不要來!
<br style="text-align: left;"/></p></article>]]></content:encoded><category>生活</category><source>千趣網</source><pubDate>Tue, 06 Sep 2016 13:44:18 +0800</pubDate></item></channel></rss>

 

第一步:建立根標籤

Document doc = new Document();Element rss = new Element("rss");rss.setAttribute("version", "2.0");doc.setRootElement(rss);

第二步:建立子標籤(帶有CDATA的)

Element channel = new Element("channel");//將channel標籤置於rss標籤中rss.addContent(channel);//不帶CDATA地區的Element CTitle = new Element("title");CTitle.addContent(channelData.getTitle());channel.addContent(CTitle);//帶CDATA地區的Element CDescription = new Element("description");CDATA str = new CDATA(channelData.getDescription());CDescription.addContent(str);channel.addContent(CDescription);...........以此類推,需要多少標籤,已同樣的方式建立即可,如果標籤較多,也得自己手動編寫代碼,是一件比較苦逼的活兒

第三步:使用io流將拼接好的xml輸出

XMLOutputter out = new XMLOutputter();// 建立輸出資料流        ByteArrayOutputStream buf = new ByteArrayOutputStream();        out.output(doc, buf);        String ok = buf.toString("ISO-8859-1");        return ok;
這裡需要強調一下:這裡的編碼我這邊是需要改成iso-8859-1的(控制台輸出的=對應的日誌也是亂碼,但是再瀏覽器中提供者連結時,不會出現亂碼),我這我也比較鬱悶,之前換成utf-8不好使,會出現亂碼

注意事項:

  1,我使用的是springmvc作為表現層架構的

@Controller@RequestMapping("")public class SuNingAction {    @Autowired    private SuNingService suNingService;    @RequestMapping(method={RequestMethod.GET},produces = MediaType.APPLICATION_XHTML_XML_VALUE,value={"/suNing"})    @ResponseBody()    public String Xiaozhi(HttpServletResponse response) throws JAXBException, IOException {具體代碼就是上面的三大步驟;return null;}

  2,關於xml中的名稱空間問題<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">

  

        Document doc = new Document();        Element rss = new Element("rss");      //名稱空間的添加        Namespace ns= Namespace.getNamespace("content", "http://purl.org/rss/1.0/modules/content/");        rss.addNamespaceDeclaration(ns);         //版本號碼的添加        rss.setAttribute("version", "2.0");        doc.setRootElement(rss);
//這招絕對好用

 

  3,有的rss中的content標籤,需要帶上encoded,比如說上面的案例就需要使用 <content:encoded>並且還需CDATA包裹

  

Element Icontent = new Element("encoded", "content","http://purl.org/rss/1.0/modules/content/");CDATA c = new CDATA(itemData.get(i).getContent());Icontent.addContent(c);item.addContent(Icontent);

  4,時間格式問題

  涉及到時間的格式化問題Tue, 06 Sep 2016 13:44:18 +0800

  還有就是星期的轉化,中英文的轉換問題,這些可以通過百度自行解決,並不是痛點

  5,還有最後一個問題是在servcie層中關於資料返回的問題

  注意變數的定義的範圍,也就是全域變數與局部變數的定義位置問題,當從資料庫中擷取到資料後,通過get/set方法存值時,千萬注意,不要將變數定義成全域的

  否則無論你檢索的資料有多少條,存放值的對象中使用是一條相同的資料,這個問題雖然不大,但盡量不要犯,會被人嘲笑的, 擦,老子就被總監嘲笑半天.......

  

  

 

 

  

 

  

Element CDescription = new Element("description");
CDATA str = new CDATA(channelData.getDescription());
CDescription.addContent(str);
channel.addContent(CDescription);

新聞類網站rss介面的編寫心得

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.