package myday02.xml.exercise;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
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.NodeList;
public class XMLDemo {
public static void main(String[] args) throws Exception {
System.out.println("添加用户:(a)");
System.out.println("删除用户:(b)");
System.out.println("查询成绩:(c)");
System.out.println("退出程序:(d)");
System.out.print("请输入操作类型:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String type = br.readLine();
if ("d".equals(type)) {
System.out.println("ByeBye......");
}
String targetFileName = "src/main/resources/myday02/xml/exercise/exam.xml";
if ("a".equals(type)) {
Student student = new Student();
System.out.print("用户姓名为:");
BufferedReader brName = new BufferedReader(new InputStreamReader(System.in));
String name = brName.readLine();
student.setName(name);
System.out.print("用户身份证号为:");
BufferedReader brIdCard = new BufferedReader(new InputStreamReader(System.in));
String idCard = brIdCard.readLine();
student.setIdCard(idCard);
System.out.print("用户准考证号为:");
BufferedReader brExamId = new BufferedReader(new InputStreamReader(System.in));
String examId = brExamId.readLine();
student.setExamId(examId);
System.out.print("用户所在地为:");
BufferedReader brLocation = new BufferedReader(new InputStreamReader(System.in));
String location = brLocation.readLine();
student.setLocation(location);
System.out.print("用户成绩为:");
BufferedReader brgrade = new BufferedReader(new InputStreamReader(System.in));
String grade = brgrade.readLine();
student.setGrade(grade);
addStudent(student, targetFileName);
}
if ("b".equals(type)) {
System.out.print("删除用户名为:");
BufferedReader brName = new BufferedReader(new InputStreamReader(System.in));
String name = brName.readLine();
removeStudent(name, targetFileName);
}
if("c".equals(type)){
System.out.print("查询用户名为:");
BufferedReader brName = new BufferedReader(new InputStreamReader(System.in));
String name = brName.readLine();
queryStudentGrade(name, targetFileName);
}
}
private static void queryStudentGrade(String name, String targetFileName) throws Exception {
Document document = getDocument(targetFileName);
NodeList list = document.getElementsByTagName("name");
int index = -1;
for(int i=0; i<list.getLength(); i++){
if(list.item(i).getTextContent().equals(name)){
index = i;
break;
}
}
if(index ==-1){
System.out.println("你所查询的用户并不存在!!!!!!");
}else {
Element element = (Element) list.item(index).getParentNode();
Element gradeElement = (Element) element.getElementsByTagName("grade").item(0);
System.out.println("用户" + name +"的成绩为" + gradeElement.getTextContent());
}
}
private static void removeStudent(String name, String targetFileName) throws Exception {
Document document = getDocument(targetFileName);
NodeList list = document.getElementsByTagName("name");
int index = -1;
for (int i = 0; i < list.getLength(); i++) {
if (list.item(i).getTextContent().equals(name)) {
index = i;
break;
}
}
if (index != -1) {
Element ele = (Element) list.item(index);
Element parentEle = (Element) ele.getParentNode();
Element root = (Element) document.getElementsByTagName("exam").item(0);
root.removeChild(parentEle);
writeToXML(document, targetFileName);
System.out.println("用戶刪除成功!!!!");
} else {
System.out.println("文件中没有用户名为 " + name + " 的記錄!!!!!" );
}
}
private static void addStudent(Student student, String fileName) throws Exception {
Document document = getDocument(fileName);
Element eleStudent = document.createElement("student");
eleStudent.setAttribute("examid", student.getExamId());
eleStudent.setAttribute("idcard", student.getIdCard());
Element eleName = document.createElement("name");
eleName.setTextContent(student.getName());
Element eleLocation = document.createElement("location");
eleLocation.setTextContent(student.getLocation());
Element eleGrade = document.createElement("grade");
eleGrade.setTextContent(student.getGrade());
eleStudent.appendChild(eleName);
eleStudent.appendChild(eleLocation);
eleStudent.appendChild(eleGrade);
Element exam = (Element) document.getElementsByTagName("exam").item(0);
exam.appendChild(eleStudent);
writeToXML(document, fileName);
System.out.println("用户添加成功!!!!");
}
private static Document getDocument(String fileName) throws Exception {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = docFactory.newDocumentBuilder();
Document document = builder.parse(fileName);
return document;
}
private static void writeToXML(Document document, String targetFileName) throws Exception {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer trans = transformerFactory.newTransformer();
trans.transform(new DOMSource(document), new StreamResult(new FileOutputStream(targetFileName)));
}
}
package myday02.xml.exercise;
public class Student {
private String name;
private String examId;
private String idCard;
private String location;
private String grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getExamId() {
return examId;
}
public void setExamId(String examId) {
this.examId = examId;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<exam>
<student examid="1101001000234" idcard="532401197504210032">
<name>aaaa</name>
<location>北京</location>
<grade>100.00</grade>
</student>
</exam>