Java XML应用

步骤一:

编写一个学生类的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<students1>
  <!-- 书写方式一 -->
  <student>
  		<sid>1</sid>
  		<sname>张山</sname>
  		<sgender>20</sgender>
  		<stel>234234</stel>
  </student>
  <student>
  		<sid>2</sid>
  		<sname>李四</sname>
  		<sgender>210</sgender>
  		<stel>234234</stel>
  </student>
    <!-- 书写方式二  推荐使用该书写方式-->
    <student id="1">
  		<sname>张山</sname>
  		<sgender>20</sgender>
  		<stel>234234</stel>
  </student>
  <student	id="2">
  		<sname>李四</sname>
  		<sgender>210</sgender>
  		<stel>234234</stel>
  </student>
  <!-- 书写方式三 -->
    <student id="1" name="张山" grade="20">
  </student>
  <student	 id="1" name="李四" grade="210">
  </student>
</students1>

步骤二:

创建一个学生类来存放xml里的学生数据:

public class Student {
	private String sid;
	private String sname;
	private String sgender;
	private String stel;
	public String getSid() {
		return sid;
	}
	public void setSid(String sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public String getSgender() {
		return sgender;
	}
	public void setSgender(String sgender) {
		this.sgender = sgender;
	}
	public String getStel() {
		return stel;
	}
	public void setStel(String stel) {
		this.stel = stel;
	}
	public Student(String sid, String sname, String sgender, String stel) {
		super();
		this.sid = sid;
		this.sname = sname;
		this.sgender = sgender;
		this.stel = stel;
	}
	public Student() {
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Student [sid=" + sid + ", sname=" + sname + ", sgender=" + sgender + ", stel=" + stel + "]";
	}
	
}

步骤三 :

创建Demo测试类来实现对上述xml中DOM数中数据的读、写、删除以及修改等操作。

public class Demo {

	public static void main(String[] args) throws DocumentException {
		 String xmlfile ="src/students_1.xml";
		 List<Student> datas=readAllStudents1(xmlfile);
		System.out.println(datas);
	}
	//获取学生suo
	private  static List<Student> readAllStudents1(String xml) throws DocumentException {
		//把学生类放到list集合里
		List<Student>  list = new ArrayList<Student>();
		//创建SAXReader的对象来读取xml中的数据
		SAXReader reader=new SAXReader();
		Document document= reader.read(xml);
		//得到根元素
		Element root = document.getRootElement();
		//创建Iterator迭代器
		Iterator<Element> it=root.elementIterator();
		Student student =null;
		 while (it.hasNext()){
		 	Element stu = it.next();
		 	//通过elementText来读取标签里的内容
		 	 String name =stu.elementText("same");
			 String id =stu.elementText("sid");
			 String sgender =stu.elementText("sgender");
			 String stl =stu.elementText("stel");
			 //创建含有信息数据的student对象
			 student = new Student(id,name,sgender,stl);
			 //把该学生对象放到list集合中
			 list.add(student);
		 }

		return  list;
	}
	//更新某个学生的信息
	private static void updateStudent(Student stu,String xml) {
		try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(xml);
			Element root = document.getRootElement();
			Iterator<Element> it = root.elementIterator();
			Element findUpdateElement = null;
			while(it.hasNext()) {
				Element e = it.next();
				if(e.attributeValue("sid").equals(stu.getSid())) {
					findUpdateElement = e;
					break;
				}
			}
			if(findUpdateElement!=null) {
				//实现修改
				findUpdateElement.element("sname").setText(stu.getSname());
				findUpdateElement.element("sgender").setText(stu.getSgender());
				findUpdateElement.element("stel").setText(stu.getStel());
				//保存;
				OutputFormat format = OutputFormat.createPrettyPrint();
				XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(xml),format);
				xmlWriter.write(document);
				xmlWriter.close();
			}
			
		}catch(Exception e) {}
	}
	//通过id删除某个学生数据
	private static void removeStudent(String sid,String xml) {
		try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(xml);
			Element root = document.getRootElement();
			Iterator<Element> it = root.elementIterator();
			Element findElement = null;
			while(it.hasNext()) {
				Element tmp = it.next();
				if(tmp.attributeValue("sid").equals(sid)) {
					findElement = tmp;
					break;
				}
			}
			if(findElement!=null) {
				//实现删除;
				root.remove(findElement);
				//重新保存document;
				OutputFormat format = OutputFormat.createPrettyPrint();
				XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(xml),format);
				xmlWriter.write(document);
				xmlWriter.close();
			}
			
		}catch(Exception e) {}
	}
	//添加学生数据
	private static void addStudent(Student student,String xml) {
		try {
			 SAXReader reader = new SAXReader();
			 Document document = reader.read(xml);
			 Element root = document.getRootElement();//拿根元素;
			 //在根元素下添加子元素;
			 
			 Element element = root.addElement("student"); //返回添加的元素对象;
			 //设置元素的属性
			 element.addAttribute("sid", student.getSid());
			 //添加三个子元素;
			 element.addElement("sname").setText(student.getSname());
			 element.addElement("sgender").setText(student.getSgender());
			 element.addElement("stel").setText(student.getStel());
			 //内存中的根元素多了student元素;
			 //保存doucument -- 需要流
			 //格式化
			  OutputFormat format = OutputFormat.createPrettyPrint();
			  //format.setEncoding("GBK");
			  //XMLWriter xmlWriter=new XMLWriter(new FileWriter(xml),format);
			  XMLWriter xmlWriter=new XMLWriter(new FileOutputStream(xml),format);
			  xmlWriter.write(document);
			  xmlWriter.close();
			
		}catch(Exception e) {}
	}
	//通过id获取学生数据
	private static Student get(String sid,String xml) {
		Student student = null;
		try {
			SAXReader saxReader = new SAXReader();
			Document  document =saxReader.read(xml);
			Element root =document.getRootElement();
			Iterator<Element> it = root.elementIterator();
			while(it.hasNext()) {
				Element stuElement =it.next();
				String idAttrValue = stuElement.attributeValue("sid"); 
				if(idAttrValue.equals(sid)) {
					String sname = stuElement.elementText("sname");
					String sgender=stuElement.elementText("sgender");
					String stel = stuElement.elementText("stel");
					student = new Student(sid, sname, sgender, stel);
					break;
				}
			}
		}catch(Exception e) {}
		return student;
	}

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值