实验环境:jdk1.9
实验工具:eclipse
问题:
Students.xml
[html] view plain copy
- <?xml version="1.0" encoding="GB2312"?>
- <学生名单>
- <学生>
- <学号>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
[html] view plain copy
- 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
[html] view plain copy
- 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<length;i++){
- Node node=namesList.item(i);
- String content=node.getTextContent();
- System.out.print(node.getNodeName());
- System.out.println(":"+content);
- }
- }catch(Exception e){
- System.out.println(e);
- }
- }
- }
Experiment9_3ShowNameAndHobby.java
[html] view plain copy
- 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<length;i++){
- Node node=namesList.item(i);
- Element elementNode=(Element)node; // 将节点转换为元素节点
- String name=node.getTextContent();// 获得节点的文本内容
- String content=elementNode.getAttribute("爱好");// 获得元素节点的属性
- if(content!=""){
- System.out.print(name);
- System.out.println(":"+content);
- }
- }
- }catch(Exception e){
- System.out.println(e);
- }
- }
- }
Experiment9_4QueryByID.java
[html] view plain copy
- 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<length;i++){
- Node node=namesList.item(i);
- Element elementNode=(Element)node; // 将节点转换为元素节点
- String name=node.getTextContent();// 获得节点的文本内容
- String content=elementNode.getAttribute("爱好");// 获得元素节点的属性
- if(content!=""){
- System.out.print(name);
- System.out.println(":"+content);
- }
- }*/
- NodeList numberList = doc.getElementsByTagName("学号");
- int length = numberList.getLength();
- String content = null;
- String content2=null;
- boolean has = false;
- ArrayList<String> list = new ArrayList<String>();
- for(int i = 0;i<length;i++) {
- Node node=numberList.item(i);
- content=node.getTextContent();
- content2 = numberList.item(i).getParentNode().getTextContent();
- list.add(content);
- //System.out.println(list);
- //System.out.println(content);
- if(content.equals(s)==false) {
- continue;
- }else {
- System.out.println("有这个同学,这个同学的信息是:");
- System.out.println(content2);
- break;
- }
- /*if(content.equals(s)==false) {
- has = false;
- }else {
- has = true;
- System.out.println("有这个同学的信息,信息是:"+content2);
- }*/
- /*ArrayList<String> list = new ArrayList<String>();
- 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
[html] view plain copy
- 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
[html] view plain copy
- 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<String> list = new ArrayList<String>();
- for(int i = 0;i<length;i++) {
- Node node=numberList.item(i);
- content=node.getTextContent();
- content2 = numberList.item(i).getParentNode().getTextContent();
- list.add(content);
- if(content.equals(s)==false) {
- continue;
- }else {
- //System.out.println("有这个同学,这个同学的信息是:");
- root.removeChild(numberList.item(i).getParentNode());
- break;
- }
- }
- String content4=root.getTextContent();
- System.out.println(content4);
- if(list.contains(s)) {
- System.out.println("已删除学号为"+s+"的同学!");
- }else {
- System.out.println("没有此学号的同学!!");
- }
- }catch(Exception e){
- System.out.println(e);
- }
- }
- }
Experiment9_7updateAverageGrade1.java
[html] view plain copy
- 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<length;i++) {
- Node mathNode = mathList.item(i);
- double mathGrade =Double.parseDouble(mathNode.getTextContent());
- Node EnglishNode = EnglishList.item(i);
- double EnglishGrade = Double.parseDouble(EnglishNode.getTextContent());
- String s = (mathGrade+EnglishGrade)/2+"";
- //System.out.println(s);
- Element averageGrade=doc.createElement("平均分");
- averageGrade.appendChild(doc.createTextNode(s));
- Node node = studentsList.item(i);
- node.appendChild(averageGrade);
- }
- String content=root.getTextContent();
- System.out.println(content);
- TransformerFactory transFactory=TransformerFactory.newInstance();
- Transformer transformer=transFactory.newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT,"yes");// 添加换行符 添加换行符
- DOMSource domSource=new DOMSource(doc);
- File file=new File("studentsNew2.xml");
- FileOutputStream out=new FileOutputStream(file);
- StreamResult xmlResult=new StreamResult(out);
- transformer.transform(domSource,xmlResult);
- System.out.println("成功");
- }catch(Exception e){
- System.out.println(e);
- }
- }
- }
程序结果如图:
showAll.webp
showAllName.webp
showAllNameAndHobby.webp
showUpdateAverageGrade.webp
程序总结:
此次试验加深了对W3c.org.DOM的理解。掌握了java语言解析xml文件的相关的类。学会了用java程序创建节点和移除节点和查询节点等。
相关难点就是难以掌握节点的定位问题。通过getElementByTagName解决。再通过此节点的父亲节点或者是子节点来定位到所要寻找的节点。