一、作业要求:

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模版展示

 <?xml version="1.0" encoding="UTF-8"?>
<news>
<new title="美国男篮邀请考辛斯参加训练营 厄文小乔丹同获邀" author="刘潇潇" createTime="2013-04-16">
<!-- <title>美国男篮邀请考辛斯参加训练营 厄文小乔丹同获邀</title>
<author>刘潇潇</author>
<createTime>2013-04-16</createTime> -->
<content>根据最新消息,美国男篮已向几位优秀的年轻球员发出了训练营邀请,这些球员包括国王的考辛斯,快船的小乔丹,骑士的厄文,泽勒,威特斯等。美国男篮的迷你训练营将在7月末举行,去年夏天考辛斯曾参加训练营,和美国男篮的主力阵容进行对抗,当时美男篮主管科朗吉洛表示,考辛斯还有很多方面不成熟,需要更多的成长。对此考辛斯很不高兴,还找科朗吉洛质问。不过现在,现在知情人透露,在美国男篮高层进行了诸多争论后,考辛斯还是得到了邀请名额,参加这次迷你训练营,他将有机会正式入选美国队。你得把过去埋葬掉,然后继续向前,”科朗吉洛说道,“他受到了邀请,他绝对在我们的名单上。新的一年,新的夏天,新的机会。”考辛斯在国王效力了3个赛季,是目的前全联盟最有进攻才华的大个子球员,他具备在内线得分的多种手段,也有远距离投射能力,又会控球和传球。上赛季考辛斯场均可以交出17.1分,9.9篮板的数据。不过考辛斯最大的问题在于他的易怒性格,情绪不稳定,和自己的俩个前任教练斯玛特,威斯特法尔都发生过争吵,和队友,其它队友的人事,媒体也都有过争执。在被问到最喜欢考辛斯打球的那些方面时,科朗吉洛回答:“个头,天赋。”快船的中锋小乔丹也透露自己同样收到邀请。“我很高兴能有这次机会,”乔丹说道,“我得把握住它。“乔丹上赛季场均数据是8.8分,7.2篮板,137盖帽。骑士的全明星控卫厄文和俩个队友威斯特,泽勒也都收到了邀请。美国男篮举办迷你训练营的地点在拉斯维加斯,时间从7月23日到26日。</content>
</new>
<new title="还在指望房贷打折?放弃吧,这个信号你要看懂" author="何小桃" createTime="2017-05-28">
<!-- <title>还在指望房贷打折?放弃吧,这个信号你要看懂</title>
<author>何小桃</author>
<createTime>2017-05-28</createTime> -->
<content>房价收入比高得离谱的今天,按揭买房已经成为了绝大多数人的选择。因此,房贷利率成为了买房者关心的问题。
每经小编(微信号:nbdnews)了解到,近半年来,很多城市的银行都上调了房贷利率折扣,其中部分城市的房贷利率已经执行基准利率,而北京的二套房房贷利率更是执行基准利率上浮20%。
有网友就不无焦虑地说到,“有钱人还是一下子买得起,穷人负担更重了”。
那么,房贷利率为何上升呢?一个重要的原因是,一向不差钱的银行也“没钱”了。
银行成本收益出现倒挂
当然,银行缺钱更准确的说法,不是银行没钱了,而是“钱贵”了。
5月22日,上海银行间同业拆借利率(Shibor)一年期品种利率报4.3024%,创逾两年以来最高位,首次高于4.30%的上海银行间市场一年期贷款基础利率(LPR)。此后,1年期Shibor持续走高,截至5月27日,报4.3544%,已经高于央行4.35%的1年期贷款基准利率。</content>
</new>
</news>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>{title}</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=gbk">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<table align="center" width="70%" border="1">
<tr>
<td width="10%">
<b>标题:</b>
</td>
<td>
{title}
</td>
</tr>
<tr>
<td width="10%">
<b>作者:</b>
</td>
<td>
{author}
</td>
</tr>
<tr>
<td width="10%">
<b>时间:</b>
</td>
<td>
{createTime}
</td>
</tr>
<tr>
<td width="10%">
<b>内容:</b>
</td>
<td>
{content}
</td>
</tr>
</table>
</body>
</html>

  3.解析XML文件的方法(使用DOM4J解析XML文件,并用Map集合保存)

 //声明泛型集合用于保存读取的xml文件
Map<String,New> news = new HashMap<String, New>(); //读取xml文件保存到泛型集合
public void readXml(){
//声明news文档
Document newDoc = null;
try {
//加载news的DOM树
SAXReader reader = new SAXReader();
newDoc = reader.read(new File("src/news/sourecs/News.xml"));
} catch (DocumentException e) {
e.printStackTrace();
}
//获取XML的根节点
Element root = newDoc.getRootElement();
//遍历所有的new标签
for (Iterator<?> itNews = root.elementIterator(); itNews.hasNext();) {
Element newEle = (Element)itNews.next();
//获取title、author、createTime属性
String title = newEle.attributeValue("title");
String author = newEle.attributeValue("author");
String time = newEle.attributeValue("createTime");
//遍历content标签
for (Iterator<?> contents = newEle.elementIterator(); contents.hasNext();) {
Element content = (Element) contents.next();
//获取content标签的值
String text = content.getText();
//实例化New对象,保存新闻信息
New newCon = new New(title,author,time,text);
//添加到泛型集合
news.put(title, newCon);
}
}
}

  4.读取模版内容并替换新闻

 //读取新闻模版并替换指定内容
public void editHtml(){
this.readXml();
try {
//创建输入流读取模版文件
FileReader fr = new FileReader("src/news/template/NewsTemplate.html");
BufferedReader reader = new BufferedReader(fr);
//使用StringBuffer类
String line = null;
StringBuffer sbf = new StringBuffer();
//循环读取并追加字符
while((line=reader.readLine())!=null){
sbf.append(line+"\n");
}
//遍历Map集合提取news
Set<String> titles = news.keySet();
Iterator<String> it = titles.iterator();
while(it.hasNext()){
String title = it.next();//提取key
New new1 = news.get(title);
//替换内容
String str = sbf.toString();
str = str.replace("{title}", new1.getTitle());
str = str.replace("{author}", new1.getAuthor());
str = str.replace("{createTime}",new1.getTime());
str = str.replace("{content}",new1.getContent());
//创建输出流写出html文件
FileWriter fw = new FileWriter("src/news/html/"+new1.getTitle()+".html");
BufferedWriter writer = new BufferedWriter(fw);
writer.write(str);
writer.close();
fw.close();
reader.close();
fr.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("已创建Html文件!\n文件在src/news/html文件夹下!");
}

  5.最终生成的HTML文件

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

  1. marshaller unmarshaller解析xml和读取xml

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...

  2. dede后台title怎么修改的?去掉XXXX-织梦内容管理系统V5.7

    dede后台title怎么修改的? 去掉XXXX-织梦内容管理系统V5.7 打开include/common.inc.php的文件. $cfg_version = 'V57_UTF8_SP1';(这是 ...

  3. Java中解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM ...

  4. boost-使用property_tree来解析xml、json

    property_tree是一个保存了多个属性值的树形数据结构,可以用来解析xml.json.ini.info文件.要使用property_tree和xml解析组件的话需要包含"boost/ ...

  5. SAX与DOM解析XML的区别

    解析xml有四种方法:DOM,SAX,DOM4j,JDOM.     我们主要学了两种:DOM和SAX.     DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DO ...

  6. java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  7. java解析XML文件四种方法之引入源文件

    1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();         Documen ...

  8. 使用dom4j中SAXReader解析xml数据

    public ApiConfig(String configFilePath) throws DocumentException{ SAXReader reader = new SAXReader() ...

  9. CMS (内容管理系统)

    ylbtech-Miscellaneos:CMS (内容管理系统) CMS是"Content Management System"的缩写,意为"内容管理系统". ...

随机推荐

  1. VS2010设置默认浏览器

    1.选择项目中起始页右键,然后选择浏览方式 2.然后就可以设置默认浏览器了

  2. Web 安全入门-书籍及建议

    https://www.jianshu.com/p/6dcebd54fb24 (本文源于转载或摘抄整理) 2016-06-12 Fooying 优主张 最近比较忙,灵感稍微有点缺乏,本着宁缺毋滥的想法 ...

  3. oracle导出clob 工具

    oracle导出clob 等大字段,用pl/sql 等无法导出,除了备份数据库,但是一般数据库中正式环境数据和开发环境中数据不一定完全一致或者合适导出,即使仅仅导出导入一个表,有时候也不方便或者业务上 ...

  4. 百度分享,简单的一步操作解决你的网站不支持https访问的问题!

    百度分享,应该是目前最好用的前端分享插件了.然而,官方却没有支持https.现在越来越多的网站都走入https的安全加密队列了,那么在找不到更好地替代品的情况下,怎么能让它支持https呢? 答案当然 ...

  5. EasyUI学习笔记(二)—— Layout

    一.layout页面布局 EasyUI布局容器包括东.西.南.北.中五个区域,其中中心面板是必须的,而东.西.南.北这四个面板是可选的,如果布局里面不需要东.西.南.北这四个面板,那么可以把相应的di ...

  6. JAVA数据结构--插入排序

    插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in- ...

  7. 洛谷 P3267 [JLOI2016/SHOI2016]侦察守卫(树形dp)

    题面 luogu 题解 树形\(dp\) \(f[x][y]表示x的y层以下的所有点都已经覆盖完,还需要覆盖上面的y层的最小代价.\) \(g[x][y]表示x子树中所有点都已经覆盖完,并且x还能向上 ...

  8. Miller_Rabin素数测试【学习笔记】

    引语:在数论中,对于素数的研究一直就很多,素数测试的方法也是非常多,如埃式筛法,6N±1法,或者直接暴力判(试除法).但是如果要判断比较大的数是否为素数,那么传统的试除法和筛法都不再适用.所以我们需要 ...

  9. 【2-SAT】【并查集】NOIp模拟题 植树方案 题解

        一个类似2-SAT的思想,但是简化了很多.只需要用到并查集实现. 题目描述 企鹅国打算种一批树.所谓树,就是由$N$个结点与$N-1$条边连接而成的连通无向图.企鹅国的国王对于这些树有下列要求 ...

  10. 二分查找-数组实现(小trick)

    template<typename T> int binarySearch(T arr[], int n, T target){ , r = n-; //在[l...r]范围内寻找targ ...