|  | 
|  | 1 | +package cn.itcast.dao; | 
|  | 2 | + | 
|  | 3 | +import org.w3c.dom.Document; | 
|  | 4 | +import org.w3c.dom.Element; | 
|  | 5 | +import org.w3c.dom.Node; | 
|  | 6 | +import org.w3c.dom.NodeList; | 
|  | 7 | + | 
|  | 8 | +import cn.itcast.domain.Student; | 
|  | 9 | +import cn.itcast.util.DocumentUtil; | 
|  | 10 | +//异常:抛的话,上层能解决才行 | 
|  | 11 | +//上一层如果处理不了,自己必须处理。 | 
|  | 12 | + | 
|  | 13 | +public class StudentDao implements IStudentDao { | 
|  | 14 | +	/** | 
|  | 15 | +	 * 添加学生信息到XML中 | 
|  | 16 | +	 * @param s | 
|  | 17 | +	 * @return | 
|  | 18 | +	 */ | 
|  | 19 | +	public boolean createStudent(Student s){ | 
|  | 20 | +		System.out.println("JAXP"); | 
|  | 21 | +		//目标:在根元素exam中添加student子元素 | 
|  | 22 | +		boolean result = false; | 
|  | 23 | +		try { | 
|  | 24 | +			Document document = DocumentUtil.getDocument(); | 
|  | 25 | +			//创建name、location、grade元素并设置其主体内容 | 
|  | 26 | +			Element nameE = document.createElement("name"); | 
|  | 27 | +			nameE.setTextContent(s.getName()); | 
|  | 28 | +			Element locationE = document.createElement("location"); | 
|  | 29 | +			locationE.setTextContent(s.getLocation()); | 
|  | 30 | +			Element gradeE = document.createElement("grade"); | 
|  | 31 | +			gradeE.setTextContent(s.getGrade()+""); | 
|  | 32 | +			//创建student元素,并设置其属性 | 
|  | 33 | +			Element studentE = document.createElement("student"); | 
|  | 34 | +			studentE.setAttribute("idcard", s.getIdcard()); | 
|  | 35 | +			studentE.setAttribute("examid", s.getExamid());//CTRL+ALT+ARROW | 
|  | 36 | +			 | 
|  | 37 | +			studentE.appendChild(nameE); | 
|  | 38 | +			studentE.appendChild(locationE); | 
|  | 39 | +			studentE.appendChild(gradeE); | 
|  | 40 | +			//得到exam元素,把student挂接上去 | 
|  | 41 | +			Node node = document.getElementsByTagName("exam").item(0); | 
|  | 42 | +			node.appendChild(studentE); | 
|  | 43 | +			//写回XML文件中 | 
|  | 44 | +			DocumentUtil.write2xml(document); | 
|  | 45 | +			result = true; | 
|  | 46 | +		} catch (Exception e) { | 
|  | 47 | +			throw new RuntimeException(e);//异常转义。异常链 | 
|  | 48 | +		} | 
|  | 49 | +		return result; | 
|  | 50 | +	} | 
|  | 51 | +	/** | 
|  | 52 | +	 * 根据准考证号查询学生信息 | 
|  | 53 | +	 * @param examid | 
|  | 54 | +	 * @return 如果学生不存在,返回null | 
|  | 55 | +	 */ | 
|  | 56 | +	public Student findStudent(String examid){ | 
|  | 57 | +		Student s = null; | 
|  | 58 | +		 | 
|  | 59 | +		try{ | 
|  | 60 | +			//得到Document对象 | 
|  | 61 | +			Document document = DocumentUtil.getDocument(); | 
|  | 62 | +			//得到所有的student元素 | 
|  | 63 | +			NodeList nl = document.getElementsByTagName("student"); | 
|  | 64 | +			//遍历student元素,判断他的examid属性的取值是否与参数匹配 | 
|  | 65 | +			for(int i=0;i<nl.getLength();i++){ | 
|  | 66 | +				Node node = nl.item(i); | 
|  | 67 | +//				if(node.getNodeType()==Node.ELEMENT_NODE){ | 
|  | 68 | +//					Element e = (Element)node; | 
|  | 69 | +				if(node instanceof Element){ | 
|  | 70 | +					Element e = (Element)node; | 
|  | 71 | +					if(e.getAttribute("examid").equals(examid)){ | 
|  | 72 | +					//如果匹配:说明找到了学生;创建学生对象 | 
|  | 73 | +						s = new Student(); | 
|  | 74 | +					//设置学生对象的各个属性取值 | 
|  | 75 | +						s.setExamid(examid); | 
|  | 76 | +						s.setIdcard(e.getAttribute("idcard")); | 
|  | 77 | +						s.setName(e.getElementsByTagName("name").item(0).getTextContent()); | 
|  | 78 | +						s.setLocation(e.getElementsByTagName("location").item(0).getTextContent()); | 
|  | 79 | +						s.setGrade(Float.parseFloat(e.getElementsByTagName("grade").item(0).getTextContent())); | 
|  | 80 | +					} | 
|  | 81 | +				} | 
|  | 82 | +			} | 
|  | 83 | +		}catch(Exception e){ | 
|  | 84 | +			throw new RuntimeException(e); | 
|  | 85 | +		} | 
|  | 86 | +		 | 
|  | 87 | +		return s; | 
|  | 88 | +	} | 
|  | 89 | +	/** | 
|  | 90 | +	 * 根据学生姓名删除学生 | 
|  | 91 | +	 * @param name | 
|  | 92 | +	 * @return 如果人不存在也返回false | 
|  | 93 | +	 */ | 
|  | 94 | +	public boolean deleteStudent(String name){ | 
|  | 95 | +		boolean result = false; | 
|  | 96 | +		try{ | 
|  | 97 | +			//得到Document对象 | 
|  | 98 | +			Document document = DocumentUtil.getDocument(); | 
|  | 99 | +			//得到所有的name元素 | 
|  | 100 | +			NodeList nl = document.getElementsByTagName("name"); | 
|  | 101 | +			//遍历name元素,判断其主体内容是否与参数一致 | 
|  | 102 | +			for(int i=0;i<nl.getLength();i++){ | 
|  | 103 | +				//如果一致:找到他的爸爸的爸爸,删除它的爸爸 | 
|  | 104 | +				Node n = nl.item(i); | 
|  | 105 | +				if(n.getTextContent().equals(name)){ | 
|  | 106 | +					n.getParentNode().getParentNode().removeChild(n.getParentNode()); | 
|  | 107 | +					//写回XML文档 | 
|  | 108 | +					DocumentUtil.write2xml(document); | 
|  | 109 | +					result = true; | 
|  | 110 | +					break; | 
|  | 111 | +				} | 
|  | 112 | +			} | 
|  | 113 | +		}catch(Exception e){ | 
|  | 114 | +			throw new RuntimeException(e); | 
|  | 115 | +		} | 
|  | 116 | +		return result; | 
|  | 117 | +	} | 
|  | 118 | +} | 
0 commit comments