【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文件

时间: 2024-08-07 08:39:18

【U1结业机试题】新闻内容管理系统:解析XML文件读取Html模版生成网页文件的相关文章

Java中解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transform

DOM和SAX解析XML的区别

解析xml有四种方法:DOM,SAX,DOM4j,JDOM.     我们主要学了两种:DOM和SAX.     DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DOM和SAX的不同:     1. DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中.从而消耗很大的内存空间.而SAX是基于事件的.当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间.     2. DOM可以读取XML也可以向XM

android pull 解析xml方式

先获取到一个XmlPullParserFactory实例 通过实例得到XmlPullParser对象 调用XmlPullParser的setInput()方法将服务返回的XML数据设置进去开始解析 通过getEventType()可以得到当前的解析事件 While循环不断地进行解析 如果当前的解析事件不等于XmlPullParser.END_DOCUMENT,说明解析工作还没完成,调用next()方法后可以获取下一个解析事件. 在while循环中,我们通过getName()方法得到当前结点的名字

simple XML解析XML

写前端不会直接用js吧?而是用jquery,用php解析XML有点类似,有没有简单一些方法进行快速解析XML.有的,就是simpleXMLS.学完js有再学jQuery是不是很随意,这个一样. 模板XML: <?xml version="1.0" encoding="utf-8"?> <bookstore><book category="COOKING" id="id2"><title

CMS: 内容管理系统

CMS是Content Management System的缩写,意为"内容管理系统". 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场.业界公认的国内比较权威的产品有思拓合众CmsTop.PHPCMS.TurboCMS.对于内容管理,业界还没有一个统一的定义,不同的机构有不同的理解. 产生: 随着网络应用的丰富和发展,很多网站往往不能迅速跟进大量信息衍生及业务模式变革的脚步,常常需要花费许多时间.人力和物力来处理信息更新和维护工作:遇到网站扩充的时候,整合内外网

大数据语义分析:灵玖中科内容管理系统

随着网络应用的丰富和发展,很多网站往往不能迅速跟进大量信息衍生及业务模式变革的脚步,常常需要花费许多时间.人力和物力来处理信息更新和维护工作;遇到网站扩充的时候,整合内外网及分支网站的工作就变得更加复杂,甚至还需重新建设网站;如此下去,用户始终在一个高成本.低效率的循环中升级.整合-- 对于网站建设和信息发布人员来说,他们最关注的系统的易用性和功能的完善性,因此,这对网站建设和信息发布工具提出了一个很高的要求.首先,角色定位明确,以充分保证工作人员的工作效率;其次,功能完整,满足各门道"把关人&

We7CMS内容管理系统助阵政府完善信息公开制度

政府规定信息公开以来大多数政府都是在摸索中前进,现在系统基本上已经完善了,但是更多的需求来了,信息公开的程度不够深,不够全,就像人们满足了物质生活以后需要精神上的满足一样,我们国家的信息公开就是遇到了瓶颈. 解决政府信息不公开,首先需要强化部门上下之间层级的制约作用.政策与审批信息自上而下的公开,可以有效防止下级部门有意的遮掩,规避利益的掣肘,打开"透明"的窗口,部门上下级之间应当建立联动的公开机制,以及规范的信息公开网站平台.其次,要解决谁来监督公开,谁来对拒绝公开或者敷衍公开承担责

Orchard 基于 ASP.NET MVC 技术的免费开源内容管理系统

Orchard 是由微软公司创建,基于 ASP.NET MVC 技术的免费开源内容管理系统: 可用于建设博客.新闻门户.企业门户.行业网站门户等各种网站 简单易用的后台界面 性能稳定,功能齐全 热拔插模块化架构提供超强可扩展性 BSD 协议授权,可用于商业闭源项目 下载地址:https://orchard.codeplex.com/releases/view/119931 相关博客:http://www.orchardch.com/Blog 一个基于Orchard的开源CRM --coevery

前端面试题集锦及答案解析--HTML、 HTTP、web综合问题

前端需要注意哪些SEO 合理的title.description.keywords:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title要有所不同:description把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面description有所不同:keywords列举出重要关键词即可 语义化的HTML代码,符合W3C规范:语义化代码让搜索引擎容易理解网页 重要内容HTML代码放在最前:搜索引擎抓取HTMl顺序是从上到下,有的