【U1結業機試題】新聞內容管理系統:解析XML文件讀取Html模版生成網頁文件
一、作業要求:
1.在xml文件中創建新聞節點news,包含標題、作者、日期、正文等信息
2.創建HTML模板文件
3.讀取xml中所有新聞信息,並使用新聞信息替換模板文件中占位符,從而為每一條新聞生成一個HTML靜態頁面
二、參考思路:
階段1:創建xml
添加測試記錄不少於三條
階段2:創建HTML模板文件
階段3:從xml讀取新聞信息,保存在泛型集合中
階段4:讀取模板文件
訓練要點:
Reader類
需求說明:
讀取HTML模板文件news.template,為使用新聞信息替換其中的占位符做好準備
實現思路:
1. 使用Reader類或InputStream類讀取模板文件
2. 通過工具類FileIO的String readFile(String filePath) 實現功能
階段5:編寫生成HTML文件的方法
訓練要點:
Writer類
需求說明:
利用替換模板文件後的數據生成HTML文件
實現思路:
1、使用Writer類或OutputStream類完成該操作
2、通過FileIO的void writeFile(String filePath, String str) 實現該功能
階段6:遍歷集合,生成HTML文件
訓練要點:
String類的replace() 方法
需求說明:
遍歷保存在泛型集合中的新聞信息,替換模板文件中占位符,為每一條新聞生成一個HTML文件
實現思路:
1、通過NewsManager類的toHtml()方法完成該功能
2、替換占位符功能通過String類的replace() 實現
三、創建項目完成作業
1.創建項目,編寫需要的文件(結構如下)
2.XML文件和HTML模版展示
1 <?xml version="1.0" encoding="UTF-8"?> 2 <news> 3 <new title="美國男籃邀請考辛斯參加訓練營 厄文小喬丹同獲邀" author="劉瀟瀟" createTime="2013-04-16"> 4 <!-- <title>美國男籃邀請考辛斯參加訓練營 厄文小喬丹同獲邀</title> 5<author>劉瀟瀟</author> 6 <createTime>2013-04-16</createTime> --> 7 <content>根據最新消息,美國男籃已向幾位優秀的年輕球員發出了訓練營邀請,這些球員包括國王的考辛斯,快船的小喬丹,騎士的厄文,澤勒,威特斯等。美國男籃的迷你訓練營將在7月末舉行,去年夏天考辛斯曾參加訓練營,和美國男籃的主力陣容進行對抗,當時美男籃主管科朗吉洛表示,考辛斯還有很多方面不成熟,需要更多的成長。對此考辛斯很不高興,還找科朗吉洛質問。不過現在,現在知情人透露,在美國男籃高層進行了諸多爭論後,考辛斯還是得到了邀請名額,參加這次迷你訓練營,他將有機會正式入選美國隊。你得把過去埋葬掉,然後繼續向前,”科朗吉洛說道,“他受到了邀請,他絕對在我們的名單上。新的一年,新的夏天,新的機會。”考辛斯在國王效力了3個賽季,是目的前全聯盟最有進攻才華的大個子球員,他具備在內線得分的多種手段,也有遠距離投射能力,又會控球和傳球。上賽季考辛斯場均可以交出17.1分,9.9籃板的數據。不過考辛斯最大的問題在於他的易怒性格,情緒不穩定,和自己的倆個前任教練斯瑪特,威斯特法爾都發生過爭吵,和隊友,其它隊友的人事,媒體也都有過爭執。在被問到最喜歡考辛斯打球的那些方面時,科朗吉洛回答:“個頭,天賦。”快船的中鋒小喬丹也透露自己同樣收到邀請。“我很高興能有這次機會,”喬丹說道,“我得把握住它。“喬丹上賽季場均數據是8.8分,7.2籃板,137蓋帽。騎士的全明星控衛厄文和倆個隊友威斯特,澤勒也都收到了邀請。美國男籃舉辦迷你訓練營的地點在拉斯維加斯,時間從7月23日到26日。</content> 8 </new> 9 <new title="還在指望房貸打折?放棄吧,這個信號你要看懂" author="何小桃" createTime="2017-05-28"> 10 <!-- <title>還在指望房貸打折?放棄吧,這個信號你要看懂</title> 11 <author>何小桃</author> 12 <createTime>2017-05-28</createTime> --> 13 <content>房價收入比高得離譜的今天,按揭買房已經成為了絕大多數人的選擇。因此,房貸利率成為了買房者關心的問題。 14 每經小編(微信號:nbdnews)了解到,近半年來,很多城市的銀行都上調了房貸利率折扣,其中部分城市的房貸利率已經執行基準利率,而北京的二套房房貸利率更是執行基準利率上浮20%。 15 有網友就不無焦慮地說到,“有錢人還是一下子買得起,窮人負擔更重了”。 16 那麽,房貸利率為何上升呢?一個重要的原因是,一向不差錢的銀行也“沒錢”了。 17 銀行成本收益出現倒掛 18 當然,銀行缺錢更準確的說法,不是銀行沒錢了,而是“錢貴”了。 19 5月22日,上海銀行間同業拆借利率(Shibor)一年期品種利率報4.3024%,創逾兩年以來最高位,首次高於4.30%的上海銀行間市場一年期貸款基礎利率(LPR)。此後,1年期Shibor持續走高,截至5月27日,報4.3544%,已經高於央行4.35%的1年期貸款基準利率。</content> 20 </new> 41 </news>
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 <html> 3 <head> 4 <title>{title}</title> 5 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 6 <meta http-equiv="description" content="this is my page"> 7 <meta http-equiv="content-type" content="text/html; charset=gbk"> 8 <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> 9 </head> 10 <body> 11 <table align="center" width="70%" border="1"> 12 <tr> 13 <td width="10%"> 14 <b>標題:</b> 15 </td> 16 <td> 17 {title} 18 </td> 19 </tr> 20 <tr> 21 <td width="10%"> 22 <b>作者:</b> 23 </td> 24 <td> 25 {author} 26 </td> 27 </tr> 28 <tr> 29 <td width="10%"> 30 <b>時間:</b> 31 </td> 32 <td> 33 {createTime} 34 </td> 35 </tr> 36 <tr> 37 <td width="10%"> 38 <b>內容:</b> 39 </td> 40 <td> 41 {content} 42 </td> 43 </tr> 44 </table> 45 </body> 46 </html>
3.解析XML文件的方法(使用DOM4J解析XML文件,並用Map集合保存)
1 //聲明泛型集合用於保存讀取的xml文件 2 Map<String,New> news = new HashMap<String, New>(); 3 4 //讀取xml文件保存到泛型集合 5 public void readXml(){ 6 //聲明news文檔 7 Document newDoc = null; 8 try { 9 //加載news的DOM樹 10 SAXReader reader = new SAXReader(); 11 newDoc = reader.read(new File("src/news/sourecs/News.xml")); 12 } catch (DocumentException e) { 13 e.printStackTrace(); 14 } 15 //獲取XML的根節點 16 Element root = newDoc.getRootElement(); 17 //遍歷所有的new標簽 18 for (Iterator<?> itNews = root.elementIterator(); itNews.hasNext();) { 19 Element newEle = (Element)itNews.next(); 20 //獲取title、author、createTime屬性 21 String title = newEle.attributeValue("title"); 22 String author = newEle.attributeValue("author"); 23 String time = newEle.attributeValue("createTime"); 24 //遍歷content標簽 25 for (Iterator<?> contents = newEle.elementIterator(); contents.hasNext();) { 26 Element content = (Element) contents.next(); 27 //獲取content標簽的值 28 String text = content.getText(); 29 //實例化New對象,保存新聞信息 30 New newCon = new New(title,author,time,text); 31 //添加到泛型集合 32 news.put(title, newCon); 33 } 34 } 35 }
4.讀取模版內容並替換新聞
1 //讀取新聞模版並替換指定內容 2 public void editHtml(){ 3 this.readXml(); 4 try { 5 //創建輸入流讀取模版文件 6 FileReader fr = new FileReader("src/news/template/NewsTemplate.html"); 7 BufferedReader reader = new BufferedReader(fr); 8 //使用StringBuffer類 9 String line = null; 10 StringBuffer sbf = new StringBuffer(); 11 //循環讀取並追加字符 12 while((line=reader.readLine())!=null){ 13 sbf.append(line+"\n"); 14 } 15 //遍歷Map集合提取news 16 Set<String> titles = news.keySet(); 17 Iterator<String> it = titles.iterator(); 18 while(it.hasNext()){ 19 String title = it.next();//提取key 20 New new1 = news.get(title); 21 //替換內容 22 String str = sbf.toString(); 23 str = str.replace("{title}", new1.getTitle()); 24 str = str.replace("{author}", new1.getAuthor()); 25 str = str.replace("{createTime}",new1.getTime()); 26 str = str.replace("{content}",new1.getContent()); 27 //創建輸出流寫出html文件 28 FileWriter fw = new FileWriter("src/news/html/"+new1.getTitle()+".html"); 29 BufferedWriter writer = new BufferedWriter(fw); 30 writer.write(str); 31 writer.close(); 32 fw.close(); 33 reader.close(); 34 fr.close(); 35 } 36 } catch (FileNotFoundException e) { 37 e.printStackTrace(); 38 } catch (IOException e) { 39 e.printStackTrace(); 40 } 41 System.out.println("已創建Html文件!\n文件在src/news/html文件夾下!"); 42 }
5.最終生成的HTML文件
【U1結業機試題】新聞內容管理系統:解析XML文件讀取Html模版生成網頁文件