创建一个xml文件,用来存放学生信息,要求实现四个功能, 可以通过java代码查询数据,以及添加,修改和删除数据功能

创建一个xml文件,用来存放学生信息,要求实现四个功能,
可以通过java代码查询数据,以及添加,修改和删除数据功能

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/*创建一个xml文件,用来存放学生信息,要求实现四个功能,
可以通过java代码查询数据,以及添加,修改和删除数据功能*/
//使用DOM解析XML文件
public class Test {
	//收藏信息,xml对应的Document对象
	private Document document;
	
	//获得DOM树,获得Document对象
	public void getStu() {
		//获得解析器工厂
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		try {
			//根据解析器工厂获得解析器
			DocumentBuilder builder=factory.newDocumentBuilder();
			//解析器来解析XML文件获得Document对象
			document=builder.parse("学生信息.xml");
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//获取学生相关信息
	public void showInfo() {
		//以Document做起点,先拿到所有的Stu点
		NodeList stus=document.getElementsByTagName("Stu");
		//遍历Stu,从中拿出每一个Stu节点
		for(int i=0;i<stus.getLength();i++) {
			Node node=stus.item(i);
			Element eleStu=(Element)node;
			String stuName=eleStu.getAttribute("name");
			System.out.println(stuName);
		}
	}
	//为XML文件添加元素
	public void addEle() {
		//(1)创建<Stu>
		Element stu=document.createElement("Stu");
		//(2)为<Stu>设置name的属性取值为小兰
		stu.setAttribute("name", "小兰");
		//将Stu放到Student中
		document.getElementsByTagName("Student").item(0).appendChild(stu);
		saceXML();
	}
	//保存XML文件(需要借助转换器:源(最新的DOM树)--》目的地(学生信息.xml),借助输出流)
	public void saceXML() {
		//转换器工厂
		TransformerFactory factory=TransformerFactory.newInstance();
		try {
			//转换器
			Transformer transformer=factory.newTransformer();
			factory.setAttribute("indent-number", 4);
			//指定转换格式
			transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
			transformer.setOutputProperty(OutputKeys.INDENT, "YES");
			//源(最新的DOM树)--》目的地(学生信息.xml)
			DOMSource source=new DOMSource(document);
			OutputStream out=new FileOutputStream("学生信息.xml");
			StreamResult result=new StreamResult(new OutputStreamWriter(out));
			
			transformer.transform(source, result);
		} catch (TransformerConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			
		} catch (TransformerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//修改元素
	public void upddateEle() {
		//获取所有的Stu
		NodeList stus=document.getElementsByTagName("Stu");
		for(int i=0;i<stus.getLength();i++) {
			Node stu=stus.item(i);
			Element stuEle=(Element)stu;
			stuEle.setAttribute("age", (i+15)+"");
		}
		saceXML();
	}
	//删除 小明
	public void deleteEle() {
		//获取所有的Stu
		NodeList stus=document.getElementsByTagName("Stu");
		for(int i=0;i<stus.getLength();i++) {
			Node stu=stus.item(i);
			Element stuEle=(Element)stu;
			
			if(stuEle.getAttribute("name").equals("小明")) {
				stuEle.getParentNode().removeChild(stuEle);
			}
		}
		saceXML();
	}
	
	public static void main(String[] args) {
		Test test=new Test();
		test.getStu();
//		test.deleteEle();//删除数据
//		test.upddateEle();//修改数据
//		test.addEle();//添加数据
		test.showInfo();//查询数据
	}

}

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<Student>
	<Stu name="小明"></Stu>
	<Stu name="小花"></Stu>
</Student>
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
某学校拟使用XML文件制定一个学生(含已毕业学生信息文档,该文档描述其学校内学生的管理信息。 1、 选用合适的编辑器,编写一个XML文件,应至少包括下述信息内容: 学生目录下应该包括: (1) 所有学生的共有信息:班级的名字、专业、类别等 (2) 学生 学生1 学生基本信息学生姓名、性别、学号、年龄) 入学信息(入学时间、辅导员名) 班级内学生生源信息( 生源1:(生源地名称、联系方式等信息) 生源2: 生源n: ) 毕业信息(毕业时间、毕业数量、辅导员名) 学生2 学生3 。。。。。 学生N (3)辅导员 辅导员1(辅导员姓名、联系 方式、职位、管理的班级名) 辅导员2 2、针对该XML文件,画出其相应的树状结构图。 3、针对所编写的XML文件,编写其相应的DTD文件,并使用解析器验证其有效性,对验证结果抓图。 4、针对所编写的XML文件,编写合适的XSL文件,将学生基本信息打印成表格,并用ie浏览器进行浏览并截图。 5、使用JAVA编程语言,对XML文件进行解析: 显示该xml文件的所有节点、属性的名字; 同时显示该xml文件所有标记的文本数据; 计算学生的入学平均年龄并进行输出。 要求:1)xml文件中应该包括文本内容、标记、属性、命名空间,混合标记等的内容 2)dtd文件应该有相应的结果抓图 3)xsl文件应用到规范中的常用技巧,例如模板调用、for-each、value-of、xsl标记等。 4)解析器结果应该有抓图。 5)形成的代码交老师验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值