1. 程式人生 > >【U1結業機試題】新聞內容管理系統:解析XML文件讀取Html模版生成網頁文件

【U1結業機試題】新聞內容管理系統:解析XML文件讀取Html模版生成網頁文件

repl att not 一個 class 新的 create hashmap exception

一、作業要求:

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模版生成網頁文件