使用的是Jdom中的相關API,具體步驟以下html
要求的格式:spring
<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">mvc
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包裹app
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);