实验环境:jdk1.9
实验工具:eclipse
问题:
Students.xml
<学生名单>
<学生>
<学号>201501110101学号>
<姓名 爱好="足球">张三姓名>
<性别>男性别>
<专业>软件工程专业>
<数学>85数学>
<英语>90英语>
学生>
<学生>
<学号>201501110102学号>
<姓名 爱好="篮球">李四姓名>
<性别>女性别>
<专业>软件工程专业>
<数学>92数学>
<英语>75英语>
学生>
<学生>
<学号>201501110103学号>
<姓名>王五姓名>
<性别>男性别>
<专业>软件工程专业>
<数学>79数学>
<英语>88英语>
学生>
<学生>
<学号>201501110104学号>
<姓名 爱好="音乐">赵六姓名>
<性别>男性别>
<专业>软件工程专业>
<数学>79数学>
<英语>88英语>
学生>
<学生>
<学号>201501110105学号>
<姓名>刘七姓名>
<性别>女性别>
<专业>软件工程专业>
<数学>90数学>
<英语>74英语>
学生>
<学生>
<学号>201501110106学号>
<姓名 爱好="上网">张君宝姓名>
<性别>男性别>
<专业>软件工程专业>
<数学>91数学>
<英语>67英语>
学生>
<学生>
<学号>201501110107学号>
<姓名>崔春晓姓名>
<性别>女性别>
<专业>软件工程专业>
<数学>70数学>
<英语>83英语>
学生>
<学生>
<学号>201501110108学号>
<姓名>倪冰姓名>
<性别>女性别>
<专业>软件工程专业>
<数学>91数学>
<英语>76英语>
学生>
<学生>
<学号>201501110109学号>
<姓名>杨惠姓名>
<性别>女性别>
<专业>软件工程专业>
<数学>78数学>
<英语>90英语>
学生>
<学生>
<学号>201501110110学号>
<姓名 爱好="音乐">李中华姓名>
<性别>男性别>
<专业>软件工程专业>
<数学>98数学>
<英语>79英语>
学生>
<学生>
<学号>201501110201学号>
<姓名>张越姓名>
<性别>男性别>
<专业>网络工程专业>
<数学>85数学>
<英语>97英语>
学生>
<学生>
<学号>201501110202学号>
<姓名>秦水天姓名>
<性别>男性别>
<专业>网络工程专业>
<数学>52数学>
<英语>76英语>
学生>
<学生>
<学号>201501110203学号>
<姓名>张名扬姓名>
<性别>男性别>
<专业>网络工程专业>
<数学>50数学>
<英语>69英语>
学生>
<学生>
<学号>201501110204学号>
<姓名>张楚越姓名>
<性别>男性别>
<专业>网络工程专业>
<数学>82数学>
<英语>77英语>
学生>
<学生>
<学号>201501110205学号>
<姓名 爱好="上网">林子默姓名>
<性别>女性别>
<专业>网络工程专业>
<数学>95数学>
<英语>86英语>
学生>
<学生>
<学号>201501110206学号>
<姓名 爱好="看电视">李子涵姓名>
<性别>女性别>
<专业>网络工程专业>
<数学>77数学>
<英语>88英语>
学生>
学生名单>
问题:
对于前面实验中所用的XML文档“Students.xml”,利用Java语言JAXP编程实现下面功能: 9-1.全部显示:显示XML文档“Students.xml”中的所有学生信息; 9-2.显示姓名:仅显示XML文档“Students.xml”中的所有学生的姓名; 9-3.显示属性:仅显示XML文档“Students.xml”中有爱好的学生的姓名及爱好; 9-4.查询学生:依据学号查找XML文档“Students.xml”中的学生信息并显示,若找不到给予提示。 9-5.添加学生:依据给定的学生信息添加新的学生,成功添加后给予提示。要注意新添加学生的学号不能与已有学生的学号相同,出现此种情况时给予提示。 9-6.删除学生:依据给定的学生学号删除指定学生,成功删除后给予提示。若找不到所给学号的学生,给予提示“该学生不存在,无法删除”。 9-7.更新学生:为“Students.xml”文档中每位学生信息的最后面增加“平均”元素信息,其内容是该学生的“数学”与“英语”成绩的平均分。
|
注:
用eclipse新建java程序。把Students.xml文件放到本地的workSpace中,只有这样,才能在当前路径下解析xml文件。
Experiment9_1ShowAll.java
package com.xml.psd;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class Experiment9_1ShowAll {
public static void main(String[] args) {
try{
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db= dbf.newDocumentBuilder();
Document doc= db.parse("Students.xml");
Element root=doc.getDocumentElement();
String rootName=root.getNodeName();
System.out.println("-----潘圣东-----");
System.out.println(" 根元素名称是:"+rootName);
String content=root.getTextContent();
System.out.println(content);
}catch(Exception e){
System.out.println(e);
}
}
}
Experiment9_2ShowAllName.java
package com.xml.psd;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Experiment9_2ShowAllName {
public static void main(String[] args) {
try{
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db= dbf.newDocumentBuilder();
Document doc= db.parse("Students.xml");
Element root=doc.getDocumentElement();
String rootName=root.getNodeName();
System.out.println("-----潘圣东-----");
System.out.println(" 根元素名称是:"+rootName);
NodeList namesList=doc.getElementsByTagName("姓名");
int length=namesList.getLength();
//System.out.println(length);
for(int i=0;i
Experiment9_3ShowNameAndHobby.java
package com.xml.psd;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Experiment9_3ShowNameAndHobby {
public static void main(String[] args) {
try{
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db= dbf.newDocumentBuilder();
Document doc= db.parse("Students.xml");
Element root=doc.getDocumentElement();
String rootName=root.getNodeName();
System.out.println("-----潘圣东-----");
System.out.println(" 根元素名称是:"+rootName);
NodeList namesList=doc.getElementsByTagName("姓名");
int length=namesList.getLength();
for(int i=0;i
Experiment9_4QueryByID.java
package com.xml.psd;
import java.util.ArrayList;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Experiment9_4QueryByID {
public static void main(String[] args) {
System.out.println("请输入这个同学的学号:");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
try{
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db= dbf.newDocumentBuilder();
Document doc= db.parse("Students.xml");
Element root=doc.getDocumentElement();
String rootName=root.getNodeName();
System.out.println("-----潘圣东-----");
System.out.println(" 根元素名称是:"+rootName);
/*NodeList namesList=doc.getElementsByTagName("姓名");
int length=namesList.getLength();
for(int i=0;i list = new ArrayList();
for(int i = 0;i list = new ArrayList();
if(list.contains("201501110107")) {
System.out.println("1");
}else {
System.out.println("0");
}*/
}
//System.out.println(list);
if(list.contains(s)) {
System.out.println();
}else {
System.out.println("没有次学号的同学!!");
}
}catch(Exception e){
System.out.println(e);
}
}
}
Experiment9_5appendStudent.java
package com.xml.psd;
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
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;
public class Experiment9_5appendStudent {
public static void main(String[] args) {
try{
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db= dbf.newDocumentBuilder();
Document doc= db.parse("Students.xml");
Element root=doc.getDocumentElement();
String rootName=root.getNodeName();
System.out.println("-----潘圣东-----");
System.out.println(" 根元素名称是:"+rootName);
/*String content=root.getTextContent();
System.out.println(content);*/
Element student=doc.createElement("学生");
Element studentid=doc.createElement("学号");
studentid.appendChild(doc.createTextNode("201511010318"));
student.appendChild(studentid);
Element studentName=doc.createElement("姓名");
studentName.appendChild(doc.createTextNode("潘圣东"));
student.appendChild(studentName);
Element sex=doc.createElement("性别");
sex.appendChild(doc.createTextNode("男"));
student.appendChild(sex);
Element studentSpc=doc.createElement("专业");
studentSpc.appendChild(doc.createTextNode("未定专业"));
student.appendChild(studentSpc);
Element englishScore=doc.createElement("英语");
englishScore.appendChild(doc.createTextNode("600"));
student.appendChild(englishScore);
Element mathScore=doc.createElement("数学");
mathScore.appendChild(doc.createTextNode("150"));
student.appendChild(mathScore);
root.appendChild(student);
TransformerFactory transFactory=TransformerFactory.newInstance();
Transformer transformer=transFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
DOMSource domSource=new DOMSource(doc);
File file=new File("NewStudents.xml");
FileOutputStream fos=new FileOutputStream(file);
StreamResult xmlResult=new StreamResult(fos);
transformer.transform(domSource,xmlResult);
String content=root.getTextContent();
System.out.println(content);
System.out.println("插入新元素成功!");
}catch(Exception e){
System.out.println(e);
}
}
}
Experiment9_6RemoveByID.java
package com.xml.psd;
import java.util.ArrayList;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Experiment9_6RemoveByID {
public static void main(String[] args) {
System.out.println("请输入这个同学的学号:");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
try{
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db= dbf.newDocumentBuilder();
Document doc= db.parse("Students.xml");
Element root=doc.getDocumentElement();
String rootName=root.getNodeName();
System.out.println("-----潘圣东-----");
System.out.println(" 根元素名称是:"+rootName);
NodeList numberList = doc.getElementsByTagName("学号");
int length = numberList.getLength();
String content = null;
String content2=null;
String content3 = null;
boolean has = false;
ArrayList list = new ArrayList();
for(int i = 0;i
Experiment9_7updateAverageGrade1.java
package com.xml.psd;
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
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.Node;
import org.w3c.dom.NodeList;
public class Experiment9_7updateAverageGrade1 {
public static void main(String[] args) {
try{
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db= dbf.newDocumentBuilder();
Document doc= db.parse("Students.xml");
Element root=doc.getDocumentElement();
String rootName=root.getNodeName();
System.out.println("-----潘圣东-----");
System.out.println(" 根元素名称是:"+rootName);
// Element averageGrade=doc.createElement("平均分");
NodeList studentsList=doc.getElementsByTagName("学生");
NodeList mathList = doc.getElementsByTagName("数学");
NodeList EnglishList = doc.getElementsByTagName("英语");
int length = studentsList.getLength();
// System.out.println(length);
for(int i=0;i
程序结果如图:
showAll.png
showAllName.png
showAllNameAndHobby.png
showUpdateAverageGrade.png
程序总结:
此次试验加深了对W3c.org.DOM的理解。掌握了java语言解析xml文件的相关的类。学会了用java程序创建节点和移除节点和查询节点等。
相关难点就是难以掌握节点的定位问题。通过getElementByTagName解决。再通过此节点的父亲节点或者是子节点来定位到所要寻找的节点。
所有的问题均可通过getElementByTagName问题定位,进而解决。