XML设计性实验报告-推荐下载
- 格式:pdf
- 大小:277.31 KB
- 文档页数:7
河南师范大学计算机与信息技术学院计算机与信息技术学院综合性、设计性实验报告专业:计算机科学与技术 年级/班级:... 2009—2010学年第一学期课程名称 XML基础教程指导教师 ...本组成员学号姓名.............................实验地点 计科楼216机房实验时间...项目名称每日规划应用程序的设计与实现实验类型 设计性
一、实验目的:(1)掌握XML文档的基本语法,能够得到格式良好的XML文档;(2)能够了解并掌握XML DTD的定义方法及其用途;(3)掌握利用DOM接口对XML数据查询、修改和删除操作的方法和技巧。二、实验仪器或设备:1台/学生微型计算机。三、总体设计(设计原理、设计方案及流程等)1、利用XML文档作为存储载体设计并实现每日规划应用程序,要求该程序:(1)编写DTD来定义XML文档数据结构类型;(2)设计XML文档,存储每日规划,要求该时间表中,日期、时间和事件是必须的;(3)使用DOM查询该文档中特定时间的安排;(4)使用DOM修改某一特定时间的任务安排;(5)使用DOM删除某一特定时间的任务安排。2、设计流程图:
否是
是开始
获取根节点
输入年月日
是否匹配输出“今日无规划记录”
输出日程规划
河南师范大学计算机与信息技术学院
修改删除删除
什么都不做
四、实验步骤(包括主要步骤、代码分析等)(1)编写DTD来定义XML文档数据结构类型,保存为jia.dtd,代码如下:/*声明了一个schedule元素类型,含有子元素date,且该子元素可以出现任意次*//*声明了一个date元素类型,含有子元素time,且该子元素可以出现任意次*//*为date声明了三个属性,分别为year,month,day*/ /*声明一个time元素类型,该元素类型的元素内容为文本 内容*//*为date声明了一个属性,即为t*/(2)编写XML文档,要求日程含有具体的日期,具体事件。保存为jia.xml,部分代码及解释如下: /*给出data三个属性的具体值,确定了日期*/ 上课/*给出具体的时间8:00,并给出具体事件“上课”*/ 逛街 玩跳舞毯 (3) 创建解析XML文档的Java程序,保存为“jia.java”,代码及部分代码分析如下: import org.w3c.dom.*;import javax.xml.parsers.*;import java.io.*;输入2输入1判断何种操作
输出结果输出结果输出“操作完成!输入时间输入时间
河南师范大学计算机与信息技术学院import java.util.*;import javax.xml.transform.*;import javax.xml.transform.stream.*;import javax.xml.transform.dom.*;public class jia{ public static void main(String args[]){ Scanner reader=new Scanner(System.in);System.out.println("输入年:");String y=reader.nextLine();System.out.println("输入月:");String m=reader.nextLine();System.out.println("输入日:");String d=reader.nextLine(); //从键盘输入年、月、日的值boolean flg=false;//标志位,反馈匹配信息try{ DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document document=builder.parse(new File("jia.xml")); Element root=document.getDocumentElement(); //得到根节点 String rooName=root.getNodeName(); System.out.println("XML文件根结点的名称为:"+rooName); NodeList nodelist=document.getElementsByTagName("date");//得到date节点集合 int size=nodelist.getLength(); //得到date节点集合的长度 for(int i=0;i
河南师范大学计算机与信息技术学院 System.out.println("输入需要修改的时间:"); Scanner reader1=new Scanner(System.in); String sj1=reader1.nextLine();//输入所要修改的时间 System.out.println("修改结果:"); tt.Upd(timenode,sj1); //调用Upd方法,实现对XML文档的修改 } else{ if(test==2){ System.out.println("输入需要删除的时间:"); Scanner reader2=new Scanner(System.in); String sj2=reader2.nextLine();//输入所要删除的时间 System.out.println("删除结果:"); tt.Del(elementNode,sj2);//调用Del方法,实现对XML文档的删除 } else{ System.out.println("操作完成,退出!"); }//如果不修改,不删除,则输出“操作完成,推出!” } } }} if(!flg){ System.out.println("今日无规划记录");}//如果匹配不到时间,标志位为假,则输出“今日无规划记录” TransformerFactory transFactory=TransformerFactory.newInstance(); //创建一个TransformerFactory(转换工厂对象) Transformer transformer=transFactory.newTransformer(); //创建一个Transformer对象(文件转换对象) DOMSource domSource=new DOMSource(document); //把要转换的Document对象封装到一个DOMSource类中 File file=new File("jia.xml"); FileOutputStream out=new FileOutputStream(file); StreamResult xmlResult=new StreamResult(out); //将转换得到的XML文件保存在StreamResult中 transformer.transform(domSource,xmlResult);//把节点树转换为XML文件 } catch(Exception e){ System.out.println(e); } }}创建辅助类TotalM,下面是Out方法,通过tt对象调用实现结果的输出:public void Out(NodeList timenode){
河南师范大学计算机与信息技术学院 int size=timenode.getLength();//得到time节点集合的长度for(int k=0;k
content=elementNode.getTextContent(); //获得新的文本内容 } System.out.println(timename+" "+id+" "+content+"\n");//输出修改后的结果下面是tt对象中的Del方法,实现对节点的删除:public void Del(Element elementNode,String sj2){//这里传递的参数与上边不同,由于要用到time的父节点,所以要传递参数Element elementNode NodeList timenode=elementNode.getChildNodes(); int size=timenode.getLength(); for(int k=0;k